この記事では、Shellの引用メカニズムについて詳しく説明します。 まず、メタ文字について説明します。
目次
メタ文字
Unix Shellにはさまざまなメタ文字が用意されています。これらのメタ文字は、任意のShellスクリプトで使用する時にも、特別な意味があり、引用符で囲まない限り、単語が終了します。
例えば、「?
」でディレクトリ内のファイルを一覧表示する場合は、1文字を使用して一致し、「*」は複数の文字を一致します。 これは、ほとんどのshell特殊文字(メタ文字とも呼ばれます)のリストです。
* ? [ ] ' " \ $ ; & ( ) | ^ < > 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つであるため、特別な処理を避けるためにシェル(Shell)を引用符で囲む必要があります。
#!/bin/sh
echo "I have \$1200"
実行した後、以下の結果が表示されます。
I have $1200
以下のテーブルには、4つの引用符を示します。
番号 | 引用符と説明 |
1 | 一重引用符。これらの引用符の間のすべての特殊文字は、特別な意味を失います。 |
2 | 二重引用符。これらの引用符の間のほとんどの特殊文字は特別な意味を失いますが、例外の場合は以下のようです。「$`\ $\’\“\」 |
3 | バックスラッシュ。バックスラッシュの後の文字は、その特別な意味を失います。 |
4 | バックティックマーク。バックティックマークの間にある内容は、コマンドとし、実行されます。 |
一重引用符
多くの特殊なshell文字を含むechoコマンドについて考えます。
echo <-$1500.**>; (update?) [y|n]
各特殊文字の前にバックスラッシュを付けるのは面倒で、行が読みにくくなります。
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
多数の文字を引用する簡単な方法があります。 文字列の最初と最後に一重引用符(’)を付けます。
echo '<-$1500.**>; (update?) [y|n]'
一重引用符内の文字は囲まれます。各文字の前にバックスラッシュが付いているのように引用符で囲まれます。 これにより、echoコマンドは正しい方法で表示されます。
出力する文字列に一重引用符が含まれている場合は、以下に示すように、文字列全体を一重引用符で囲むのではなく、文字の後ろにはバックスラッシュ(\)を使用する必要があります。
echo 'It\'s Shell Programming
二重引用符
以下のshellスクリプトを実行します。 このshellスクリプトは一重引用符を使用します。
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'
バックティック
バックティックの間にShellコマンドを置くと、コマンドが実行されます。
構文
以下のは、バックティックの間にShellコマンドを配置するための構文です。
var=`command`
実例
以下の実例では、dateコマンドを実行し、結果がDATA変数に格納されます。
DATE=`date`
echo "Current Date: $DATE"
実行した後、以下の結果が表示されます。
Current Date: Thu Jul 2 05:28:45 UTC 2020
コメントを残す