6

よろしくお願いします。

タイトルはすべてを示しています:使用の違いは何ですか:

echo `basename $HOME` 

echo $(basename $HOME)

basenameコマンドが何をするかを知っていることに注意してください。両方の構文が有効であり、両方のコマンドが同じ出力を提供します。

両方の間に違いがあるのか​​、それが可能であるのなら、なぜこれに2つの構文があるのか​​疑問に思っていました。

乾杯

ラファエル

4

3 に答える 3

7

2番目の形式には、さまざまなエスケープルールがあり、ネストがはるかに簡単になります。例えば

echo $(echo $(basename $HOME))

読者のための演習として`を使用してそれを行う方法を検討することはお任せします、それは啓発的であることが証明されるはずです。

于 2013-01-18T13:48:25.807 に答える
4

それらは同じものの1つです。これ
を読んでください。

編集(リンクから):
コマンド置換

コマンド置換により、コマンドの出力でコマンド自体を置き換えることができます。コマンド置換は、コマンドが次のように囲まれている場合に発生します。

$(command)

またはバックティックを使用してこのように:

`command`

BashCOMMANDを実行し、コマンド置換をコマンドの標準出力に置き換えて、末尾の改行を削除して拡張を実行します。埋め込まれた改行は削除されませんが、単語の分割中に削除される可能性があります。

$ franky ~> echo `date`
Thu Feb 6 10:06:20 CET 2003

古いスタイルのバッククォート形式の置換が使用される場合、バックスラッシュは、「$」、「 `」、または「\」が後に続く場合を除いて、その文字通りの意味を保持します。バックスラッシュが前に付いていない最初のバックティックは、コマンド置換を終了します。フォームを使用する場合$(COMMAND)、括弧内のすべての文字がコマンドを構成します。特別に扱われるものはありません。

コマンド置換はネストできます。バッククォートされたフォームを使用するときにネストするには、バックスラッシュで内側のバックティックをエスケープします。

置換が二重引用符で囲まれている場合、単語の分割とファイル名の展開は結果に対して実行されません。

于 2013-01-18T13:48:37.537 に答える
1

これらは、コマンド置換の代替構文です。@Steveが言及しているように、引用符の規則は異なり、バックティックをネストするのは困難です。一方、古いバージョンのbashや、cshなどの他のシェルでは移植性が高くなります。

于 2013-01-18T13:55:56.200 に答える