私のスクリプトのコピーにはconda.sh
次の行が表示されます。
if [ -n "${_CE_CONDA}" ] && [ -n "${WINDIR+x}" ]; then
SYSP=$(\dirname "${CONDA_EXE}")
else
SYSP=$(\dirname "${CONDA_EXE}")
SYSP=$(\dirname "${SYSP}")
fi
前にd
バックスラッシュがある理由が気になりますdirname
。私はそれが必要だとは思わない。これらのバックスラッシュの使用は、ソースファイルの他の場所でも発生します。私はこれを行う理由はありませんか?
ベストアンサー1
バックスラッシュはエイリアス拡張を抑制します。つまり、元のコマンドを実行し、エイリアスバージョンが実行されないようにします。システム設定shopt -s expand_aliases
(BASHのみ)またはsource
。
./conda.sh # usually no alias expansion (unless `shopt -s expand_aliases` in BASH)
source ./conda.sh # alias expansion
. ./conda.sh # alias expansion
一部のシステム管理者は、エイリアスが誤って他の場所で使用され、エイリアスが前述のように拡張された場合に備えて、エイリアスの副作用に対する予防措置としてすべての項目にバックスラッシュを追加することを好みます。たとえば、システムがalias dirname='dirname -z'
この値をどこかに設定し、条件が拡張エイリアスを許可している場合、残念ながらdirnameを呼び出そうとするスクリプトは、スクリプトが期待したものとは異なりdirname -z
ます。
そのようなエイリアスが存在しないと確信している場合は、すべてのバックスラッシュを削除すると正しく機能します。
または、command
バックスラッシュバージョンの代わりに使用してエイリアスを抑制することもできます。したがって、\dirname
代わりにを使用すると、command dirname
読みやすく見えます。 (などの組み込みコマンドではcd
これを使用する必要がありますbuiltin
)。私はこの方法がエイリアスだけでなく同じ名前を持つ関数もバイパスするので、好みます。