変数を定義するにはいつ$()を使用する必要がありますか?

変数を定義するにはいつ$()を使用する必要がありますか?

私が遭遇したいくつかのシェルスクリプトは、変数を定義するときに次の構文を使用します。

file_list_1=$(echo "list.txt")

または

file_list_2=$(find ./)

私は次を使うでしょう:

file_list_1="list.txt"

そして

file_list_2=`find ./`

上記のどれがより良くて安全なのかわかりません。x=$( )変数を設定するときに構文を使用すると、どのような利点がありますか?

ベストアンサー1

マニュアルで(man bash):

$(注文する)  または  `注文する`

Bash は以下を実行して拡張を実行します。注文するコマンド置換をコマンドの標準出力に置き換え、末尾の改行を削除します。埋め込まれた改行文字は削除されませんが、単語の分離中に削除される可能性があります。コマンドの置き換え$(cat 文書)同じですが、より速い選択肢を使用できます。$(< 文書)

以前のスタイルのバックティック代替形式を使用している場合、バックスラッシュは後ろに$`または来ない限り文字通りの意味を維持します\。先行バックスラッシュのない最初のバックティックはコマンド置換を終了します。使用時$(注文する)形式では、括弧内のすべての文字がコマンドを構成します。特に処理される文字はありません。

POSIX 標準は$()コマンド置換形式を定義します。$() ネストされたコマンドを許可し、ビューが良くなりました(読みやすさ)。みんなに効果があるはずですボンシェル

IEEE Std 1003.1、Shell Command Language、2.6.3 コマンドの置換

少なくとも1つのUnix(AIX)がこれを文書化しました。バックティックは使用されなくなりました。。このリンクから:

kshはバックティック構文を受け入れますが、X / Open移植性ガイドバージョン4およびPOSIX規格では廃止予定と見なされます。これらの標準では、移植可能なアプリケーションで$(command)構文を使用することをお勧めします。

ただし、/bin/shPOSIXと互換性がある必要はありません。したがって、@Jeightが指摘したように、実際の世界には時々バックティックが存在する状況がまだあります。

おすすめ記事