1. ホーム
  2. バッシュ

[解決済み】シェルスクリプトでバックチックの代わりに$()を使用する利点は何ですか?

2022-04-07 14:31:23

質問

コマンドラインの出力を bash :

  1. レガシーボーンシェルバックタック `` :

    var=`command`
    
    
  2. $() 構文 (私の知る限り、これは Bash 固有のものであり、少なくともオリジナルの Bourne のような非 POSIX 古いシェルではサポートされていません)

    var=$(command)
    
    

バックティックと比較して、2番目の構文を使用する利点はありますか?それとも、この2つは完全に100%同等なのでしょうか?

どのように解決するのですか?

主なものは、以下の機能です。 ネスト このような場合、バックティックのエスケープがうまくいくかどうか、正気を失わずに、コマンドにコマンドを重ねることができます。

やや作為的ではありますが、例を挙げます。

deps=$(find /dir -name $(ls -1tr 201112[0-9][0-9]*.txt | tail -1l) -print)

にあるすべてのファイルのリストを表示します。 /dir ディレクトリツリーで、2011年12月の最も古い日付のテキストファイルと同じ名前を持つものです。 (a) .

他の例としては、親ディレクトリの名前(フルパスではない)を取得するようなものがあります。

pax> cd /home/pax/xyzzy/plugh
pax> parent=$(basename $(dirname $PWD))
pax> echo $parent
xyzzy


(a) では、その 特定 コマンドは実際には機能しないかもしれませんし、私はその機能をテストしたわけではありません。だから、もしそれで私に投票したら、あなたはその意図を見失ってしまうでしょう :-) これは、どのようにネストすることができるかを説明するためのものであり、バグのない量産可能なスニペットというわけではありません。