シェルスクリプトでのバッククォートまたはドルの使用


9

他のコマンドから返された結果から変数を設定する必要があるシェルスクリプト(Bashを使用)を書くのに忙しい。

だから私はこのような構文を使用しています:

VAR=`command 2>/dev/null`

しかし、スクリプトシェルに関する情報を探していると、次の構文を使用しても上記のことを実現できることがよくあります。

VAR=$(command 2>/dev/null)

両方が私のために働いています(私は両方のケースで期待される結果を受け取りました)そして私はまだ両方のフォームを交換可能に使用できるか、または将来の進化に確実に準拠し続けるために1つのフォームに固執する必要があるかどうか疑問に思っていますシェル?



belacquaによるリンクは、違いと使用法に関する多くの情報を提供します。それはUbuntuの問題とは関係ありませんが、プログラミングの問題ではありません。上記のリンクをたどることを強くお勧めします。
Luis Alvarado 2014

回答:


13

ドルを使う。バックティックは、使用がより複雑であるため(リンクを参照)、コードのゴルフをしているときに絶対に1つの文字を保存する必要がない限り、利点はありません。それらはおそらくすぐに人気のあるシェルから削除されないので、今のところどちらを使用しても安全です。


3

$()できる限りドル記号表記を使用してください。ネストされた引用を行う必要が生じたとき、バックティックは扱いにくく/混乱します。例:

$ FOO=`echo "foo's"`
$ echo $FOO
foo's

バックティックを置き換える$()と同じ出力が得られ、読みやすくなります(見分けるためのさまざまな角度の引用が少なくなります)。

$ FOO=$(echo "foo's")
$ echo $FOO
foo's

それと、各引用符(一重引用符、二重引用符、バックティック)はシェルで異なる何かを意味するため、$を使用すると、複雑さのレベルを取り除くのに役立ちます。そして、あなたをフォローしている開発者はあなたに感謝します、なぜなら彼/彼女はあなたが何をしたのかを理解するのがより簡単になるでしょう。


バックティックは機能的にネストすることもできません。
Bernhard

@Bernhard私の例は、私がその発言で念頭に置いていたものを示しています。
アーロン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.