私はNewbamの「Learning the Bash Shell」の本を通してbashスクリプトを独学しています。私は本の仕事をうまくやっていますが、以下のスクリプトについて少し混乱しています。これは for ループを使用してディレクトリを反復処理し、$PATH
そのディレクトリに関する情報を印刷するスクリプトです。スクリプトは
IFS=:
for dir in $PATH; do
if [ -z "$dir" ]; then dir=.; fi
if ! [ -e "$dir" ]; then
echo "$dir doesn't exist"
elif ! [ -d "$dir" ]; then
echo "$dir isn't a directory"
else
ls -ld $dir
done
私が混乱しているのは、dirが0または存在しない場合にこのnull値を現在のディレクトリに設定する理由です。それとも、dirを現在のディレクトリ(私たちがいるディレクトリ)に変更しますか?その後、スクリプトはdirが存在するか、それがディレクトリであるかをテストするように見えます。
スクリプトのこの側面を説明するのに役立つ人はいますか?[ -z "$dir" ]
これが真であれば、ディレクトリが存在せず、ディレクトリではないことを示すと思いました。
ベストアンサー1
テストでは、実際のディレクトリに関連する内容ではなく、-z
長さゼロの値をテストします。この条件は、$dir
変数にシーケンスがある場合にトリガーされ、この時点で現在のディレクトリを表すように変数値を設定してから、標準の2つのテストを実行します。::
PATH
$dir
.