初心者目線のLPIC講座 > bashシェル > メタキャラクタ
bashシェルメタキャラクタ
任意の文字列を指定するための特殊な文字のことを「メタキャラクタ」といいます。例えば「ファイル名の末尾が.txtで終わるファイル全て」を「*.txt」と表す事ができ、この「*」にあたる部分が「メタキャラクタ」です。
メタキャラクタには色々な種類があって、ちょっと戸惑ってしまうかもしれませんが、使い慣れればとっても便利なものです。
さきほどの例を具体的に示すと、
ls -l *.txt
このように入力した時には、「末尾が".txt"で終わるファイル名」が一覧表示される、といった具合です。
主なメタキャラクタを紹介します。
*・・・0文字以上の任意の文字列
?・・・任意の1文字
[文字列]・・・[]内の文字のいずれか1文字
[!文字列]・・・[]内の文字以外のいずれか1文字
‘文字列'・・・文字列として扱う
"文字列"・・・文字列として扱うが、変数は展開する
`文字列`・・・文字列をコマンドとして実行結果を表示する(変数なら展開する)
\・・・直後の一文字を普通の文字として扱う
これだけあるメタキャラクタですが、
じゃあ、メタキャラクタ自体を文字として扱いたい場合はどうするの?
という疑問があると思います。その時は、上記の一覧にもあるバックスラッシュ「\」をメタキャラクタの直前に入力すると、普通の文字として扱われます。
バックスラッシュ「\」は、Linuxではよく使われる記号で、キーボードの"¥"にあたる部分を半角で入力すると表示されます。
でも普通のパソコンでは大抵"¥"のままです。表示させる方法はあるにはあるのですが、普段は使わないので、ひとまず割愛します。
さてメタキャラクタの例をもう少し示してみます。
ls /tmp/[0-9]d
これはどういう意味でしょうか?
正解は、「/tmp配下にある"1文字目が数字で末尾が「d」のファイル名"を表示せよ」という意味です。
だから、これに該当するファイル名は、
0d , 1d , 2d , 3d , 4d , 5d , 6d , 7d , 8d , 9d
となるわけです。まあ現実問題として、こんなファイル名を使うかどうかは謎ですが(苦笑)。
ではこれはどうでしょう?
ls test???.log
これは、「最初の文字"test"の末尾に3文字を加えた、拡張子が"log"であるファイル名を表示せよ」となります。なんだかメチャクチャな指定ですね(苦笑)。
でもLPICの試験って、こんなメチャクチャな日本語表記の問題がたくさんでるというので、メタキャラクタを使って、自分で適当に文章を考えてみるのもいいかもしれないですね。
最後は、「""」「''」「``」を使ったメタキャラクタについてです。
これもまたややこしいんですが、最初の「""」は「二重引用符(ダブルクォーテーション)」といって、これで囲まれた文字列は、普通の文字列として扱われます。例えば「echo」コマンドを使って、
echo "LPIC"
とすれば、
LPIC
という具合に、画面に「LPIC」という文字が表示されます。
2つ目の「''」は「単一引用符(シングルクォーテーション)」といって、これで囲まれた場合、
echo ‘LPIC'
とすれば、
LPIC
やはり「LPIC」と表示されます。
ではシェル変数として定義した場合はどのように表示されるでしょう?
LPIC="Test for Linux"
とした場合、
echo ‘$LPIC'
と言う風に、変数なので一応「$」を付けて入力すると、
Test for Linux
という具合に、囲まれた文字列が変数である場合は、展開されて表示するのです。
これが仮に、「LPIC」が変数定義されていなかった場合には、例え「$」を付けていたとしても、単なる文字列と解釈されて、普通に「$LPIC」と表示されます。
最後の「``」ですが、これは「逆引用符(バッククォーテーション)」といい、この場合は「''」よりも少し複雑です。
先ほどの例で見てみると、
echo ‘$LPIC'
と入力すると、
Test for Linux
ここまでは「''」とも変わりませんが、仮に変数の中身を、
LPIC="date"
というように、現在の日付・時刻を表示する「date」コマンドを入力した場合、
echo `$LPIC`
と入力すると、
Mon Nov 12 16:04:52 JST 2007
のように表示されます。なかなかややこしいですが、頑張って覚えましょう。スポンサードリンク