コマンドの置き換えと二重引用符:結果が異なるのはなぜですか?

コマンドの置き換えと二重引用符:結果が異なるのはなぜですか?

以下は、バックティックと$()がどのように異なる動作をするかを示す例です。

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

私の理解はこれだからです。「バックティック内のバックスラッシュ(\)は不明瞭な方法で処理されます。」

しかし、これは別の話のようです。なぜなら、外側の二重引用符を削除すると結果が似ているからです。

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

誰かがこれがどのように機能するのか、そして「echo \"test\"`"が二重引用符を削除する理由を説明できますか?

ベストアンサー1

あなたは正しいです。この場合は別の話です。

解決策はまだ残っています同じリンクしかし、2番目のポイントは次のとおりです。

  • $() 内にネストされた参照がはるかに便利です。

    [...]

    `...`は移植性のために内部引用符の周りにバックスラッシュが必要です。

したがって、

echo "`echo \"test\"`"

次のとおりではありません。

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

しかし、これは:

echo "$(echo "test")"

これを以下と比較する必要があります。

echo "`echo \\"test\\"`"

おすすめ記事