$(stuff)と `stuff`の違いは何ですか?

$(stuff)と `stuff`の違いは何ですか?

コマンド代替構文には、ドル角かっことバックティックを使用する2つの構文があります。実行しtop -p $(pidof init)top -p `pidof init`同じ出力を提供します。これら2つの方法は同じことをしますか、それとも違いがありますか?

ベストアンサー1

以前のスタイルのバックティックは、` `バックスラッシュとネストを少し異なる方法で処理します。新しいスタイルは$()その間のすべてを( )コマンドとして解釈します。

echo $(uname | $(echo cat))
Linux

echo `uname | `echo cat``
bash: command substitution: line 2: syntax error: unexpected end of file
echo cat

ネストされたバックティックがエスケープされている場合に機能します。

echo `uname | \`echo cat\``
Linux

バックスラッシュの利点:

echo $(echo '\\')
\\

echo `echo '\\'`
\

新しいスタイルが$()すべてに適用されます。POSIX- 一貫したシェル。
〜のように映画で古いシェルにはレガシーが` `必要な場合があります。

技術的な観点に加えて、以前のスタイルには` `視覚的な欠点もあります。

  • 目立つのは難しいです。I like $(program) better than `program`
  • 一重引用符と混同しやすいです。'`'`''`''`'`''`'
  • 入力するのは非常に簡単ではありません(おそらくキーボードの標準レイアウトでも発生しません)

(SE` `自体の目的のために、この答えを書くのは痛かったです。)

おすすめ記事