私はいつもこれらの2つのフォームから同じ結果を期待できますか?
例えば:
for i in `seq 1 10`
for i in $(seq 1 10)
私は上記の2つのステートメントと同じ結果を得ました。
回答:
回答№1は12つの違いは、特殊文字の処理にあります。
マニュアルページから:
コマンド置換
コマンド置換は、コマンドの出力が コマンド名。 2つの形式があります。
$(command)
または
`command`
Bashはコマンドを実行して拡張を実行しますそして、 コマンドの標準出力との置換 末尾の改行はすべて削除されます。埋め込み改行はできません 削除されますが、単語の分割中に削除される可能性があります。コマンド 代用$(catファイル)は同等のもので置き換えることができますが より速い$(<ファイル)。
古いスタイルのバッククォート形式の置換が使用され、バックスラッシュ $、 `、または。が続くときを除いて、その文字どおりの意味を保持します。ザ 最初のバッククォートはバックスラッシュで始まり、コマンドを終了します 代用。 $(コマンド)形式を使用すると、 かっこがコマンドを構成します。特別に扱われるものはありません。
とともに $()
フォームの中に特殊文字をエスケープすることを心配する必要はありません。複雑なコマンドをドロップダウンしたい場合に役立ちます。
バッククォートされた形式は、コマンド内で何らかの置換を行う場合に便利です。
ここでは、2つの例が異なる場合の例を示します。
XXX=x1.sh
YYY=`ls -l $XXX`
ZZZ=$(ls -l $XXX)
echo YYY = $YYY
echo ZZZ = $ZZZ
出力:
ls: cannot access $XXX: No such file or directory
YYY = -rwxr-xr-x. 1 dbush dbush 94 Apr 14 23:04 x1.sh
ZZZ =