スクリプトでBASEDIR=$(pwd)
に遭遇しました。
BASEDIR="$PWD"
を上書きすること以外に、$PWD
を使用すること以外に利点や欠点はありますか?
Bashが$(pwd)
を検出すると、pwdコマンドを実行し、$(pwd)
をこのコマンドの出力に置き換えます。 _$PWD
_は、ほとんど常に設定される変数です。 pwdは、古くから組み込まれているシェルコマンドです。
したがって、この変数が設定されていない場合、_$PWD
_は失敗し、$(pwd)
構成をサポートしていないシェルを使用している場合、$()
は失敗します。ケース。したがって、私は_$PWD
_を使用します。
すべてのオタクとして、私は自分自身を持っています シェルスクリプトチュートリアル
また、_$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秒かかります。サブシェルの不要な起動やその他の無関係なプロセスは、可能な限り回避する必要があります。これらは、他の言語で使用されている関数呼び出しよりもはるかに高価です。