1. ホーム
  2. bash

[解決済み] Bashのバックティックとブレース

2023-05-10 18:37:41

質問

回答しようとしたとき この質問 を使おうと思っていました。 ${} という記法を使おうと思っていました。ここで何度もバックティックよりも望ましいと見てきたからです。

しかし、試しに

joulesFinal=${echo $joules2 \* $cpu | bc}

メッセージを受け取りました

-bash: ${echo $joules * $cpu | bc}: bad substitution

しかし

joulesFinal=`echo $joules2 \* $cpu | bc`

は問題なく動作します。では、他にどのような変更が必要でしょうか?

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

この `` はCommand Substitutionと呼ばれ、以下と同等です。 $() (括弧)を使っている間に ${} (中括弧)を使っています。

つまり、これらの式はすべて等しく、"中に置かれたコマンドを解釈する"を意味します。

joulesFinal=`echo $joules2 \* $cpu | bc`
joulesFinal=$(echo $joules2 \* $cpu | bc)
#            v                          v
#      ( instead of {                   v
#                                 ) instead of }

一方 ${} の式は変数の代入に使われます。

しかし、バックティックは非推奨であることに注意してください。 $() はPOSIX互換なので、後者を選ぶべきでしょう。


から man bash :

コマンド置換 は、コマンドの出力が コマンド名に置き換えることができます。2つの形式があります。

          $(command)
   or
          `command`

また `` は扱いが難しく、例えば入れ子にすることはできません。以下のコメントを参照し、また なぜ $(...) が ... (バックティック) よりも優先されるのはなぜですか? .