web-dev-qa-db-ja.com

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

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

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

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

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

$(cd..$(dirnameの意味を理解できません。

このコマンドがどのように実行されるかを誰かが理解するのを手伝ってもらえますか?

89
KItis

_$_のような_${HOME}_を使用すると、HOMEの値が得られます。 $(echo foo)のような_$_の使用は、サブシェルの括弧内にあるものをすべて実行し、それを値として返すことを意味します。私の例では、fooechoを標準出力に書き込むため、fooを取得します。

99
Eric Urban
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 )"全体が、呼び出されるスクリプトを含む絶対ディレクトリを取得します。

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

20
devnull