GNU/Linux >> Linux の 問題 >  >> Linux

Bashでのコマンド置換宣言構文–この2つのうちどちらがより適切な方法ですか??

この質問にはすでに回答があります :$(stuff)と `stuff`の違いは何ですか?

(6つの回答)
6年前に閉鎖されました。

これはbashのfindの一部です ループしますが、どちらがより正しい構文で、なぜですか?

filename="$(echo "$i" | cut -c5-)";
filename=`echo "$i" | cut -c5-`;

どちらもファイル名を取得するために機能します。

承認された回答:

Bashのマニュアルには、次のように記載されています。

コマンド置換のPOSIX$()形式が実装され(コマンド置換を参照)、Bourneシェルの「」(下位互換性のためにも実装されています)よりも優先されます。

したがって、$(...) `...`よりも優先されます あなたが書いている、Bash固有の新しいものなら何でも¹。バックティック置換はうまくネストせず(エスケープする必要があります)、引用動作が少し奇妙になります。 $(... $(...) ...)をネストできます 問題なく恣意的に。マニュアルでは、2つの動作を次のように説明しています。

古いスタイルのバッククォート形式の置換が使用される場合、バックスラッシュは、「$」、「`」、または「’」が後に続く場合を除いて、その文字通りの意味を保持します。バックスラッシュが前に付いていない最初のバッククォートは、コマンド置換を終了します。 $(コマンド)形式を使用する場合、括弧内のすべての文字がコマンドを構成します。特別に扱われるものはありません。

通常、厳密に必要とされていない場所を含め、単語分割の問題を回避するために、すべての文字列展開を引用符で囲むことがベストプラクティスと見なされているため、"$(...)" ここでも良い習慣です。

最後に、同じウールエッジページの2つの関連パーツ:

  • `...`を忘れたときもあります 。これは拡張の構文と一致しておらず、鎮痛剤を投与しないと入れ子にするのが非常に困難です。 $(...)を使用する 代わりに。
  • そして、天国のために、「より多くの引用符を使用してください!」文字列とパラメータ展開を単語分割から保護します。物事を適切に引用しないと、単語の分割によって赤ちゃんが食べられてしまいます。

¹実際には、POSIX shでも スクリプト、これらはベストプラクティスと見なされます。まだ弱いシェルがありますが、それらに遭遇するかどうかはわかります。


Linux
  1. cpコマンドの2つの優れた使用法:Bashショートカット

  2. Bashで$(コマンド置換)内で引用しますか?

  3. 誤ってパスワードを bash コマンド ラインに入力してしまいました

  1. どちらの端末が優れているか:BashとZsh

  2. このシェル/bash構文:Somevariable =somevalue Somecommand?

  3. 「?」を使用したコマンド置換

  1. どのBashが実行されていますか?

  2. bash エクスポート コマンド

  3. Bashのコマンド置換への変数代入の終了コード