ドル記号と括弧内にコマンドを置くと、シェルではどういう意味ですか:$(command)


110

シェルで次のコード行を理解したいだけです。現在の作業ディレクトリを取得するために使用されます。$(variable)名前が変数名の内部の値を返すことは知っていますが、何が$(command)返されるはずですか?コマンドの実行後に値を返しますか?その場合、を使用`してコマンドを実行できます。

CWD="$(cd "$(dirname $0)"; pwd)"

シェルの異なるバージョンでも、次のコード行から同じ出力を取得できます

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

私は、の意味を理解することができません$(cd..$(dirname

このコマンドがどのように実行されるかを理解するのを手伝ってくれる人はいますか?


1
そして、ここでのメリット/デメリットについての質問です$()``stackoverflow.com/questions/9449778/...
なし

回答:


115

使い方$などは${HOME}HOMEの値を与えます。$likeの使用は、$(echo foo)サブシェルの括弧内にあるものをすべて実行し、それを値として返すことを意味します。私の例では、標準出力に書き込むfooので、echofoo


37
はい; $(...)コマンドは、逆引用符を使用するよりも優れた方法です。書くことを検討してください:gcclib=$(dirname $(dirname $(which gcc)))/lib逆引用符を使用します。Markdownでそれを行うのが困難になる前でも、ネストされたコマンドのバッククォートをエスケープする必要があるため、$(...)表記法を使用しないため、困難になります。
ジョナサンレフラー、2013

7
技術的に$(echo foo)は、サブシェルではなくコマンド置換を作成します。他の現在の答えはこれを正しくします。コマンド置換はサブシェルで実行されていると思いますが、それらはまだ異なる概念です。
トリシス

4
@trysis-コマンド置換は確実にサブシェル実行されるため、注目に値します。
Eliran Malka 2017

2
バックティックが$()と同じ結果を生成することを理解していますが、違いは純粋に化粧品ですか?$()の方が読みやすいことを除けば、どちらか一方を使用する理由はありますか?
ミッチェルトレーシー

2
「$(echo foo)のような$の使用は、サブシェルの括弧内にあるものをすべて実行し、それを値として返すことを意味します。」...これは混乱を招きます。このコマンド$(echo foo)は括弧から返されたもの実行しようとするため、最初に実行されecho foo、次に実行しようとするfooとエラーになります
会計士م

21
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

このコマンドがどのように実行されるかを理解するのを手伝ってくれる人はいますか?

コマンドのさまざまな部分を見てみましょう。BASH_SOURCEソースファイル名を含むbash配列変数です。したがって"${BASH_SOURCE[0]}"、スクリプトファイルの名前が返されます。

dirnameファイル名から最後のコンポーネントを削除するGNU coreutilsによって提供されるユーティリティです。したがって、と言ってスクリプトを実行するとbash foo"$( dirname "${BASH_SOURCE[0]}" )"が返され.ます。あなたが言ったらbash ../foo、それは戻るでしょう..。以下のためにbash /some/path/fooそれは返したいです/some/path

最後に、コマンド全体 "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"が、呼び出されるスクリプトを含む絶対ディレクトリを取得します。

$(...) コマンドの置換を許可します。つまり、コマンドの出力でコマンド自体を置き換え、ネストすることができます。


1
パーティーに3年遅れて申し訳ありませんがこの声明が機能する理由を説明ていただけませんか。もし前記dirname(現在の作業ディレクトリへの相対的または絶対的な)ファイルのパスが実行戻り、cdそのディレクトリにPWDを変更し、pwd現在の作業ディレクトリの絶対パスをプリントアウトします。しかし、なぜ彼らは参加しているの&&ですか?そしてDIRcd失敗した場合はどうなりますか?
クリスチャン

2
@Christian、&&防ぐpwd場合実行しているからcd失敗しているように、DIR間違ったディレクトリを持つのではなく、空になります。
Charles Duffy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.