Unix / Linux-シェル引用メカニズム
この章では、シェルの引用メカニズムについて詳しく説明します。まず、メタ文字について説明します。
メタ文字
Unixシェルは、シェルスクリプトで使用する際に特別な意味を持つさまざまなメタ文字を提供し、引用符で囲まれていない限り単語を終了させます。
例えば、 ? ディレクトリ内のファイルを一覧表示するときに1文字と一致し、 *複数の文字に一致します。これは、ほとんどのシェル特殊文字(メタ文字とも呼ばれます)のリストです-
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
文字の前に文字を引用する(つまり、それ自体を表すようにする)ことができます。 \。
例
次の例は、 * または ? −
#!/bin/sh
echo Hello; Word
実行すると、次の結果が得られます-
Hello
./test.sh: line 2: Word: command not found
shell returned 127
引用符で囲まれた文字を使ってみましょう-
#!/bin/sh
echo Hello\; Word
実行すると、次の結果が得られます-
Hello; Word
ザ・ $ 記号はメタ文字の1つであるため、シェルによる特別な処理を避けるために引用符で囲む必要があります-
#!/bin/sh
echo "I have \$1200"
実行すると、次の結果が得られます-
I have $1200
次の表に、引用の4つの形式を示します。
シニア番号 | 引用と説明 |
---|---|
1 | Single quote これらの引用符の間のすべての特殊文字は、特別な意味を失います。 |
2 | Double quote これらの引用符の間のほとんどの特殊文字は、これらの例外を除いて特別な意味を失います-
|
3 | Backslash バックスラッシュの直後の文字は、その特別な意味を失います。 |
4 | Back quote 後ろ引用符の間にあるものはすべてコマンドとして扱われ、実行されます。 |
一重引用符
多くの特別なシェル文字を含むechoコマンドを考えてみましょう-
echo <-$1500.**>; (update?) [y|n]
各特殊文字の前に円記号を付けるのは面倒で、行が読みにくくなります-
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
文字の大きなグループを引用する簡単な方法があります。文字列の最初と最後に一重引用符( ')を付けます-
echo '<-$1500.**>; (update?) [y|n]'
一重引用符で囲まれた文字は、各文字の前に円記号があるかのように引用符で囲まれます。これにより、echoコマンドが適切に表示されます。
出力する文字列内に一重引用符が含まれている場合は、文字列全体を一重引用符で囲むのではなく、次のように円記号(\)を使用してその前に配置する必要があります。
echo 'It\'s Shell Programming
二重引用符
次のシェルスクリプトを実行してみてください。このシェルスクリプトは一重引用符を使用します-
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
実行すると、次の結果が得られます-
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
これは表示する必要があったものではありません。一重引用符が変数置換を妨げることは明らかです。変数値を置き換えて、逆コンマを期待どおりに機能させる場合は、次のようにコマンドを二重引用符で囲む必要があります。
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
実行すると、次の結果が得られます-
ZARA owes <-$1500.**>; [ as of (07/02) ]
二重引用符は、以下を除くすべての文字の特別な意味を取り除きます-
$ パラメータ置換用
コマンド置換のバッククォート
\$ 文字通りのドル記号を有効にする
\` リテラルのバッククォートを有効にするには
\" 埋め込み二重引用符を有効にするには
\\ 埋め込みバックスラッシュを有効にするには
他のすべて \ 文字はリテラルです(特別ではありません)
一重引用符で囲まれた文字は、各文字の前に円記号があるかのように引用符で囲まれます。これにより、echoコマンドが正しく表示されます。
出力する文字列内に一重引用符が含まれている場合は、文字列全体を一重引用符で囲むのではなく、次のように円記号(\)を使用してその前に配置する必要があります。
echo 'It\'s Shell Programming'
バッククォート
シェルコマンドを間に置く backquotes コマンドを実行します。
構文
シェルを配置するための簡単な構文は次のとおりです command バッククォートの間-
var=`command`
例
ザ・ date 次の例ではコマンドが実行され、生成された結果がDATA変数に格納されます。
DATE=`date`
echo "Current Date: $DATE"
実行すると、次の結果が得られます-
Current Date: Thu Jul 2 05:28:45 MST 2009