web-dev-qa-db-ja.com

Bashのバックティックとブレース

この質問 に答えたとき、${}表記法。ここで何度も見てきたように、バックティックよりも好ましい。

しかし、私が試したとき

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

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

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

しかし

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

正常に動作します。それでは、他にどのような変更を加える必要がありますか?

40
rojomoke

_``_はコマンド置換と呼ばれ、$()(括弧)と同等ですが、_${}_(中括弧)を使用しています。

したがって、これらは等しく、「内部に配置されたコマンドを解釈する」ことを意味します。

_joulesFinal=`echo $joules2 \* $cpu | bc`
joulesFinal=$(echo $joules2 \* $cpu | bc)
             ^                          ^
       ( instead of {             ) instead of }
_

_${}_式は変数置換に使用されます。


_man bash_から:

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

_          $(command)
   or
          `command`
_

また、_``_は処理が難しく、たとえばネストすることはできません。以下のコメントも参照してください なぜ_..._(バックティック)より$(...)が好ましいのですか?

67
fedorqui

特定のケースでは、動作がわずかに異なります。

$ echo "`echo \"test\" `"
test
$ echo "$(echo \"test\" )"
"test"

そのため、バッククォートは二重引用符を静かに削除します。

21
Gunstick