Bashシェルの一重引用符と二重引用符の違いは何ですか?
引用符でテキストを囲むことは、特に名前にスペースが含まれているファイルを扱うときには、コマンドラインではかなり標準的な方法ですが、一重引用符と二重引用符のどちらを使用するかをどのように知っていますか。違いを見てみましょう、そして、あなたが一方と他方を使うべき時.
一般的な規則として、二重引用符では引用符内の変数を拡張できますが、一重引用符ではできません。読み続けます.
単純なテキストによる引用
あなたが単にテキストのいくつかの単語を囲んでいるのであれば、どちらを使用しても関係ありません。どちらもまったく同じように機能します。たとえば、これら2つのコマンドはどちらもTest Directoryという名前のディレクトリを作成します。
mkdir "テストディレクトリ"
mkdir 'テストディレクトリ'
もっと経験豊富なタイプはおそらくあなたが望むならmkdir Test \ Directoryも使用できることに気付くでしょう.
シェル変数展開
一重引用符と二重引用符の違いは、コマンドラインで変数を扱うときにより重要になります。デフォルトでは、bashは$ testのような変数を完全な文字列に展開します。まず、変数を代入します。
test = "これはテストです"
これで、この変数をコマンドラインで使用できます。これは単純に出力されるはずです。 これはテストです コンソールに:
echo $ test
ここで、二重引用符と一重引用符の違いがより明確になります。一重引用符を使用すると、変数は拡張されません。たとえば、次のコマンドを実行したとします。
echo '$ test'
一重引用符を使用するとコマンドラインには '$ test'しか表示されませんが、二重引用符を使用すると正しく出力されます。
コマンドラインで '文字を使用してコマンドを展開した場合も同様です。たとえば、あなたが使用したいとしましょう pwd 別のコマンド内からコマンドを入力する - シェルに展開するよう指示するにはバッククォートを使用します。
echo 'pwd' / test
ホームフォルダにいる場合は、次のような出力が表示されます。
/ home /オタク/ test
たとえば、パスにスペースがあるフォルダにいるとします。lnコマンドを使用して、現在のディレクトリ内のファイルへのシンボリックリンクを作成したいとします。通常、lnコマンドを使用するときはフルパスを指定する必要があるので、入力を節約するために 'pwd'を使用する方がはるかに簡単です。.
引用符で囲まずにコマンドを実行しようとするとどうなるかを調べてください。
ln -s 'pwd' /テスト/ホーム/オタク/リンク名
代わりに、引用符で囲む必要があります。
ln -s "'pwd' /ファイル名" / some / other / path
より具体的な例として、この例のようなフォルダ構造があり、すべてのファイル名にスペースが含まれているとします。
unzipコマンドはすべてのファイルに対して実行するための*の使用をサポートしていないため、代わりにforコマンドを使用する必要があります。ここで物事が面白くなるところです:
* .zip内のfの場合は、$ fを解凍します。
おっとっと!うまくいかなかったようです.
代わりに、$ f変数を二重引用符で囲みます。
* .zipのfの場合は、 "$ f"を解凍します。
forコマンドがループを通過するたびに、実際には次のようなコマンドが実行されます。
"test 1.zip"を解凍します。
もちろん、ディレクトリ内のすべてのファイルに対して同じようなコマンドを繰り返し実行します。.
確認してみましょう
例を見てきましたので、見逃した場合に備えて、すぐに確認します。
二重引用符
- 変数を囲みたいときや、文字列の中でシェル展開を使いたいときに使用します。.
- シェル内で展開される$または 'を除いて、内のすべての文字は通常の文字として解釈されます。.
一重引用符
- 一重引用符で囲まれたすべての文字は文字列として解釈されます.
そしてこれで引用符のレッスンは終了です。それらを賢く使う.