そろそろ本気でコマンドライン① : クォーテーション

トラブルに見舞われた時、コマンドラインを使わないで解決することは難しい。Linux の最も基本的な部分でありながら、意外と知られていない部分も多いコマンドライン。そこで今回は、あまり説明されることのないクォーテーションを説明しようと思う。

※ コマンドを利用する為には、『アプリケーション』>『システムツール』 >『端末』で表示

クォーテーション

bash には文字を一塊として処理する方法として、 シングルクォーテーション「’」とダブルクォーテーション「”」がある。

じつはコノ違い、中級の Linux 使いですら良く理解していない場合がある。まずはココから入ろうと思う。

$ echo “$UID”
500
$ echo ‘$UID’
$UID
$

違いを説明する為に、もっとも簡単な方法を試してみた。

  • シングルクォーテーション … シェルの介在を一切許さないで一塊にする。
  • ダブルクォーテーション … シェルの介在をある程度許して一塊にする。

例えば上記の例では、環境変数「UID」を展開するかどうかの違いである。

これらはどういった時に使うのだろうか?

例えばシングルクォーテーション「’」は、文字列を一塊にしたい場合で尚且つシェルの介在を一切許したくない場合に有効である。

$ # ファイル名やディレクトリ名にスペースが含まれる場合
$ mkdir ‘Yes, I Can’
$ cd ‘Yes, I Can’
$
$ # コマンドに特殊な引数を渡す必要がある場合
$ find /var/www -iname ‘*.html’ -print
$

複雑なコマンドでは必要になる方法なので、これを機会に覚えておくと良いだろう。

ではダブルクォーテーション「”」はどこで使用するのだろうか?

$ # 環境変数を設定する場合の安全な書き方
$ export PATH=”$PATH:$HOME/bin”
$
$ # 環境変数にスペースが含まれている場合、ダブルクォーテーションを利用しないと失敗する事がある
$ # シェルの種類やバージョンによって上手くいく場合とそうでない場合がある危険な書き方
$ ABC=”Yes I Can”
$ export ABC=$ABC

環境変数を設定する必要がある場合等、環境変数を参照する時などに重宝する。シェルプログラミングのバグにもなりやすいので注意しよう。

さらにここでバッククォート「`」について説明しよう。

  • バッククォート … コマンドを実行し、結果の文字列に置換される。

バッククォート単体ではあまり意味は無いが、ダブルクォーテーションと共に使うと意味が出てくる。

$ ROOTLIST=”`ls /`”
$ echo $ROOTLIST
bin boot core.742 core.760 dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
$

一般にはあまり使いどころ無いバッククオートであるが、 シェルプログラミングをする人であれば、覚えておいて損はないだろう。

Nautilus(ノーチラス)との連携

意外と便利な Nautilus と端末との連携。単なるコピーペーストだが、簡単に紹介しよう。

Nautilus から端末へ

※ 端末にコピーやペーストを行う場合は、「Shift」キーを付加すれば良い。(コピー:「Ctrl」+「c」+「Shift」)

通常、Nautilus から端末へ「ドラッグ&ドロップ」を行うとフルパスがシングルクォーテーションで囲まれた状態でコピーされる。Nautilus でファイルブラウズしている最中に端末での操作が必要になった場合等には役に立つ。ただし、「コピー&ペースト」を行った場合等では URI(アドレス) がペーストされるので注意しよう。

また、シングルクォーテーションは単なる「塊」でしかないので、以下のような使い方もできる。

$ # 入力補完機能との連携
$ # フォルダパスのあとに文字列を追加することができる
$ # 一意に特定できる状態で「Tab」キーを押すと補完される
$ file ‘/etc/X11/xorg.conf.d’/5
$ # 「Tab」キーを押した後、次の様に変化する
$ file /etc/X11/xorg.conf.d/50-wacom.conf

こういった機能は、2つのフォルダ(例:オリジナルとバックアップのフォルダ)を比較する時などに重宝する。

2つのフォルダの比較

※ diff コマンドはテキストファイルだけでなく、バイナリファイルやディレクトリに対しても使用可能だ。「-r」オプションは再帰的を意味する。詳しくは「man diff」で確認してください。

コマンドは覚えると便利なモノも多いし、コマンドでなくては処理出来ない事も多い。食わず嫌いをしている人は、そろそろ本気で覚えたらどうだろうか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です