$()と「[冗長]のさまざまな動作

$()と「[冗長]のさまざまな動作
% PATH="MYPATH"
% VAR="PATH"

% echo $(eval echo \$$VAR)
MYPATH

% echo `eval echo \$$VAR`
5707VAR
 ^^
This is the process number.

私はその2つがまったく同じだと思いますが、回避行動など明らかにいくつかの違いがあります。違いは何ですか?

ベストアンサー1

もっとうまく表現できないので、BASHリファレンスマニュアルのテキストを再現します。

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

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

源泉:Bashリファレンスマニュアル、コマンドの置換

おすすめ記事