Unix-quoting-mechanisms
Unix/Linux-シェルの引用メカニズム
この章では、シェルの引用メカニズムについて詳しく説明します。 メタキャラクターについて議論することから始めます。
メタキャラクター
Unix Shellは、シェルスクリプトで使用中に特別な意味を持つさまざまなメタキャラクターを提供し、引用されていない限り単語を終了させます。
たとえば、?*はディレクトリ内のファイルをリストするときに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つの形式を示しています-
Sr.No. | Quoting & Description |
---|---|
1 |
Single quote これらの引用符の間のすべての特殊文字は、その特別な意味を失います。 |
2 |
Double quote これらの引用符の間のほとんどの特殊文字は、これらの例外で特別な意味を失います-
|
3 |
バックスラッシュの直後の文字は、特別な意味を失います。 |
4 |
Back quote 逆引用符の間にあるものはすべてコマンドとして扱われ、実行されます。 |
一重引用符
多くの特別なシェル文字を含むエコーコマンドを検討してください-
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* の間にシェルコマンドを挿入すると、コマンドが実行されます。
構文
バッククォートの間に任意のシェル*コマンド*を配置するための簡単な構文は次のとおりです-
var=`command`
例
次の例では date コマンドが実行され、生成された結果はDATA変数に格納されます。
DATE=`date`
echo "Current Date: $DATE"
実行すると、次の結果が表示されます-
Current Date: Thu Jul 2 05:28:45 MST 2009