よろしくお願いします。
タイトルはすべてを示しています:使用の違いは何ですか:
echo `basename $HOME`
と
echo $(basename $HOME)
basenameコマンドが何をするかを知っていることに注意してください。両方の構文が有効であり、両方のコマンドが同じ出力を提供します。
両方の間に違いがあるのか、それが可能であるのなら、なぜこれに2つの構文があるのか疑問に思っていました。
乾杯
ラファエル
よろしくお願いします。
タイトルはすべてを示しています:使用の違いは何ですか:
echo `basename $HOME`
と
echo $(basename $HOME)
basenameコマンドが何をするかを知っていることに注意してください。両方の構文が有効であり、両方のコマンドが同じ出力を提供します。
両方の間に違いがあるのか、それが可能であるのなら、なぜこれに2つの構文があるのか疑問に思っていました。
乾杯
ラファエル
2番目の形式には、さまざまなエスケープルールがあり、ネストがはるかに簡単になります。例えば
echo $(echo $(basename $HOME))
読者のための演習として`を使用してそれを行う方法を検討することはお任せします、それは啓発的であることが証明されるはずです。
それらは同じものの1つです。これ
を読んでください。
編集(リンクから):
コマンド置換
コマンド置換により、コマンドの出力でコマンド自体を置き換えることができます。コマンド置換は、コマンドが次のように囲まれている場合に発生します。
$(command)
またはバックティックを使用してこのように:
`command`
Bash
COMMANDを実行し、コマンド置換をコマンドの標準出力に置き換えて、末尾の改行を削除して拡張を実行します。埋め込まれた改行は削除されませんが、単語の分割中に削除される可能性があります。
$ franky ~> echo `date`
Thu Feb 6 10:06:20 CET 2003
古いスタイルのバッククォート形式の置換が使用される場合、バックスラッシュは、「$」、「 `」、または「\」が後に続く場合を除いて、その文字通りの意味を保持します。バックスラッシュが前に付いていない最初のバックティックは、コマンド置換を終了します。フォームを使用する場合$(COMMAND)
、括弧内のすべての文字がコマンドを構成します。特別に扱われるものはありません。
コマンド置換はネストできます。バッククォートされたフォームを使用するときにネストするには、バックスラッシュで内側のバックティックをエスケープします。
置換が二重引用符で囲まれている場合、単語の分割とファイル名の展開は結果に対して実行されません。
これらは、コマンド置換の代替構文です。@Steveが言及しているように、引用符の規則は異なり、バックティックをネストするのは困難です。一方、古いバージョンのbashや、cshなどの他のシェルでは移植性が高くなります。