コマンド置換には、ドル括弧とバッククォートの2つの構文があります。
top -p $(pidof init)
を実行します。 およびtop -p `pidof init`
同じ出力が得られます。これらの2つの方法は同じことですか、それとも違いがありますか?
承認された回答:
古いスタイルのバッククォート` `
バックスラッシュとネストの扱いは少し異なります。新しいスタイルの$()
( )
の間のすべてを解釈します コマンドとして。
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準拠のシェルに適用されます。
mouvicielが指摘したように、古いスタイルの` `
古いシェルには必要な場合があります。
技術的な観点とは別に、古いスタイルの` `
視覚的な欠点もあります:
- 気づきにくい:
I like $(program) better than `program`
- 一重引用符と簡単に混同されます:
'`'`''`''`'`''`'
- 入力はそれほど簡単ではありません(キーボードの標準レイアウトでもそうではないかもしれません)
(およびSEは` `
を使用します 自分の目的のために、この答えを書くのは苦痛でした🙂