私はbashスクリプトでコマンドを実行しなければなりません。このbashスクリプト内では他のコマンドを実行する必要があります。私はCentOSを走っています。インラインコマンド用のbash
私はブログやマニュアルでこれを行うには、2つの方法が見つかりました:ドル記号や括弧
を使用して)、ダニやアクセント文字command `sub command`
または
2を使用して
1)
command $(sub command)
2とどちらを使うのが良いですか?
私はbashスクリプトでコマンドを実行しなければなりません。このbashスクリプト内では他のコマンドを実行する必要があります。私はCentOSを走っています。インラインコマンド用のbash
私はブログやマニュアルでこれを行うには、2つの方法が見つかりました:ドル記号や括弧
を使用して)、ダニやアクセント文字command `sub command`
または
2を使用して
1)
command $(sub command)
2とどちらを使うのが良いですか?
"nestability" 以外で違いはありません:
$()
はネスト可能です:
$ echo $(echo "hi" $(echo "there"))
``ではないながら。
$(...)
と非常によく似ています。両者の唯一の違いは、特殊文字が置換されていることの詳細です。マニュアルよりもよくわかります。
旧式のバッククォート形式の置換を使用すると、バックスラッシュは$、 `、またはが続く場合を除いてリテラルの意味を保持します。バックスラッシュの前にない最初のバッククォートは、コマンド置換を終了します。 $(コマンド)形式を使用すると、括弧内のすべての文字がコマンドを構成します。特別に扱われるものはありません。
これは、例えば、$(...)
のネストするのが少し楽になります。それに加えて、違いはありません。
http://tldp.org/LDP/abs/html/commandsub.htmlからの引用:
希望を入れ子に!
他の人は構文の違いを指摘しています(基本的には、$()
はネスティングとエスケープをややクリーンにしています)。しかし、もっと重要な点については誰も言及していません。$()
ははるかに読みやすくなります。それは一重引用符(完全に異なるものを意味する)のようには見えません。また、区切り文字の区切りが異なるため、内容を視覚的に区別しやすくなります。
独自のスクリプトでは、これは本当に重要ではないかもしれません。コードの可読性は良好ですが、機能はより重要です。しかし、チュートリアル、サンプルコード、スタックオーバーフローの回答などを書いている人にとっては、可読性ははるかに重要です。人々例を入力するときにバッククォートの代わりにシングルクォートを入力し、期待どおりに動作しないときは混乱します。stackoverflowの上の例を書いてみんなのためにそう
:いくつかの問題を読者に保存し、常に$()
フォームをご利用ください。
私は$()が道クリーンであるという事実にゴードンに同意する必要があります。私は2時間、自分の.bash_profileを編集して自作のbash補完を追加するだけで、私は `と` not 'を使っていたはずだと分かっていました。
技術的にはネストすることができ、それは*レベルごとにもう一度エスケープする必要があり、そのように醜い* unmaintainable *と*です。 – l0b0