シェルスクリプトでコマンドの結果を変数に代入する

シェルスクリプトで、コマンドの実行結果を変数に代入したいケースがあります。代入する方法は下記のようなコマンド代入できます。
結果を代入したいコマンドをバッククォート(`)で囲むか、$()の括弧の部分にコマンドをいれるかのどちらかと思います

  • 書式1 「$[変数]=`コマンド`
  • 書籍2 「$[変数]=$(コマンド)
# 書式1
$command=`echo "Hello, world!"`
# 結果
Hello, world!"
# 書式2
$command=$(echo "Hello, world!")
# 結果
Hello, world!"

どちらも「Hello, world!」が出力されます。

私は最近まで書式1の「$[変数]=`コマンド`」の方を使っていました。
コマンドをバッククォート(`)で囲むやり方です。最近簡単なシェルスクリプトは、ChatGPTとかで質問するケースでは、書式1ではなく、書式2の「$[変数]=$(コマンド)」の方の$()構文の回答がほとんどです。

この違いですが、結果として同じですが、最近のシェルスクリプトでは$()構文が推奨されているようです。
理由としてはバッククォート(`)で囲む場合は、ネストされたコマンドの使用や、バッククォート内でバックスラッシュをエスケープする必要があるなど、記述が複雑になることがあるようです

$()構文の方は、Bash 2.0の登場以降、こちらの方を推奨されるようになったようで、現代のシェルスクリプトの書き方として、$()構文を使うことが一般的です。とのChatGPTから教えてもらいました

スポンサーリンク

0
0