139

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

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

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

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

$(cd..との意味がわかりません$(dirname

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

4

2 に答える 2

136

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

于 2013-08-01T03:53:17.893 に答える
24
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 )"が、呼び出されるスクリプトを含む絶対ディレクトリを取得します。

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

于 2013-08-01T05:09:18.733 に答える