/ / bashスクリプトでバックティックと$(コマンド)の違いは何ですか? [重複] - bash

bashスクリプトのバックティックと$(コマンド)の違いは何ですか? [重複] - bash

私はいつもこれらの2つのフォームから同じ結果を期待できますか?

例えば:

for i in `seq 1 10`
for i in $(seq 1 10)

私は上記の2つのステートメントと同じ結果を得ました。

回答:

回答№1は1

2つの違いは、特殊文字の処理にあります。

マニュアルページから:

コマンド置換

コマンド置換は、コマンドの出力が コマンド名。 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 =