Bashのコマンド代替宣言構文 - これら2つの方法のどちらが良いですか? [コピー]

Bashのコマンド代替宣言構文 - これら2つの方法のどちらが良いですか? [コピー]

これはfindbashループの一部であり、どちらが構文的に正確であるか、そしてその理由は何であるかを知りたいです。

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

両方の目的はファイル名を取得することです。

ベストアンサー1

これBash マニュアルには次の内容が記載されています。:

POSIX $() コマンド置換形式が実装されました (参照:コマンドの置き換え)で、Bourneシェルの ``(以前のバージョンとの互換性のために実装されています)よりも優れています。

したがって、作成中の新しいBash関連項目ではSoが$(...)優先されます。`...`バックティック置換はうまく入れ子にされず(エスケープする必要があります)、少し奇妙な引用があります。$(... $(...) ...)好きなだけ入れ子にすることができます。問題ありません。手動二人の行動を次のように描写する。:

古いスタイルのバックティック代替フォーマットを使用する場合、バックスラッシュは、「$」、「`」、または「\」が後に来ない限り、文字通りの意味を維持します。先行バックスラッシュのない最初のバックティックはコマンド置換を終了します。 $(command)形式を使用すると、角かっこ内のすべての文字がコマンドを構成します。

それ通常考える最良の方法は、厳密に要求されない場合を含む単語分離の問題を避けるために、すべての文字列拡張を引用することであるため、ここでも"$(...)"より良い方法です。

最後に、二つの関連部分同じフリースエッジページ:

  • 今あなたも忘れなければならない時です`...`。 Expansionの構文と一致せず、鎮痛剤を使用せずに入れ子にすることは困難です。代わりに使用してください$(...)
  • ください「引用符を使用してください!」文字列とパラメータ拡張を保護します。噴射。正しく引用しないと、スプレーは赤ちゃんを捕まえます。

1実際、これはPOSIXスクリプトでもshベストプラクティスと見なされます。周りにはまだ弱い殻がありますが、遭遇すればわかります。

おすすめ記事