2011-12-29 9 views
19

私はbashスクリプトでコマンドを実行しなければなりません。このbashスクリプト内では他のコマンドを実行する必要があります。私はCentOSを走っています。インラインコマンド用のbash

私はブログやマニュアルでこれを行うには、2つの方法が見つかりました:ドル記号や括弧

を使用して)、ダニやアクセント文字

command `sub command` 

または

2を使用して

1)

command $(sub command) 

2とどちらを使うのが良いですか?

答えて

34

"nestability" 以外で違いはありません:

$()はネスト可能です:

$ echo $(echo "hi" $(echo "there")) 

``ではないながら。

+2

技術的にはネストすることができ、それは*レベルごとにもう一度エスケープする必要があり、そのように醜い* unmaintainable *と*です。 – l0b0

1

$(...)と非常によく似ています。両者の唯一の違いは、特殊文字が置換されていることの詳細です。マニュアルよりもよくわかります。

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

これは、例えば、$(...)のネストするのが少し楽になります。それに加えて、違いはありません。

1

http://tldp.org/LDP/abs/html/commandsub.htmlからの引用:

  1. コマンド置換の$(...)の形式は、 `` ...とは異なる方法で二重のバックスラッシュを扱います。
  2. $(...)コマンド置換許可の形式は、このことができます

希望を入れ子に!

3

他の人は構文の違いを指摘しています(基本的には、$()はネスティングとエスケープをややクリーンにしています)。しかし、もっと重要な点については誰も言及していません。$()ははるかに読みやすくなります。それは一重引用符(完全に異なるものを意味する)のようには見えません。また、区切り文字の区切りが異なるため、内容を視覚的に区別しやすくなります。

独自のスクリプトでは、これは本当に重要ではないかもしれません。コードの可読性は良好ですが、機能はより重要です。しかし、チュートリアル、サンプルコード、スタックオーバーフローの回答などを書いている人にとっては、可読性ははるかに重要です。人々例を入力するときにバッククォートの代わりにシングルクォートを入力し、期待どおりに動作しないときは混乱します。stackoverflowの上の例を書いてみんなのためにそう

:いくつかの問題を読者に保存し、常に$()フォームをご利用ください。

0

私は$()が道クリーンであるという事実にゴードンに同意する必要があります。私は2時間、自分の.bash_profileを編集して自作のbash補完を追加するだけで、私は `と` not 'を使っていたはずだと分かっていました。

関連する問題