バッシュスクリプトヘルプ

バッシュスクリプトヘルプ

私は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.

おすすめ記事