web-dev-qa-db-ja.com

$(pwd)または$ PWDを使用する方が良いですか?

スクリプトでBASEDIR=$(pwd)に遭遇しました。

BASEDIR="$PWD"を上書きすること以外に、$PWDを使用すること以外に利点や欠点はありますか?

44
Minix

Bashが$(pwd)を検出すると、pwdコマンドを実行し、$(pwd)をこのコマンドの出力に置き換えます。 _$PWD_は、ほとんど常に設定される変数です。 pwdは、古くから組み込まれているシェルコマンドです。

したがって、この変数が設定されていない場合、_$PWD_は失敗し、$(pwd)構成をサポートしていないシェルを使用している場合、$()は失敗します。ケース。したがって、私は_$PWD_を使用します。

すべてのオタクとして、私は自分自身を持っています シェルスクリプトチュートリアル

48
Thorsten Staerk

また、_$PWD_は、そのパフォーマンスのために望ましいことにも言及する必要があります。シェル変数として、ほとんど瞬時に解決できます。 $(pwd)は少し混乱します。 Bashを使用するシステムで_man 1 bulitin_を検査すると、pwdが組み込みコマンドであることがわかります。ただし、$()構文は、内容に関係なく、常に新しいサブシェル(新しいプロセス)を起動してその内容を実行します。同じことがバックティックにも当てはまります。確かに、私がそれをベンチマークするとき:

_echo 'Benchmarking $(pwd)...'
time (for i in {1..1000}; do echo $(pwd) > /dev/null; done)
echo 'Benchmarking $PWD...'
time (for i in {1..1000}; do echo $PWD > /dev/null; done)
_

$(pwd)呼び出しには1.52秒、_$PWD_には0.018秒かかります。サブシェルの不要な起動やその他の無関係なプロセスは、可能な限り回避する必要があります。これらは、他の言語で使用されている関数呼び出しよりもはるかに高価です。

7
markasoftware