2012-01-08 10 views
5

以下の短いbashスクリプトは、指定されたディレクトリとそのサブディレクトリ内のすべてのファイルとディレクトリをリストします。スクリプト内の$1/*の意味は何ですか?それについて私にいくつかの参考資料を教えてください。おかげ

#!/bin/sh 

list_alldir(){ 
    for file in $1/* 
    do 
     if [ -d $file ]; then 
      echo $file 
      list_alldir $file 
     else 
      echo $file 
     fi 
    done 
} 

if [ $# -gt 0 ]; then 
    list_alldir "$1" 
else 
    list_alldir "." 
fi 

答えて

18

それは、$1その後、ファイルへの引数は(スクリプト名です)$0としてスクリプトに渡されたディレクトリのbashスクリプトで

として考え、最初の引数のグロブだ$2$3 ...これらのすべてにアクセスするには、ラベルを使用するか、グループ構造のいずれかを使用します。グループ構成の場合、$*[email protected]があります。

5

$1は、最初のパラメータを意味する($*[email protected]がそれらを$IFSで区切ら考えるように1つのブロックとしてすべての引数を考慮する)。
for file in $1/*は、最初のパラメータで指定されたディレクトリ内の各ファイルの名前の値を持つ変数fileでループすることを意味します。

2

$ 1が最初のコマンドライン引数です。 ./asdf.sh a b c d eを実行すると、$ 1はa、$ 2はbなどになります。関数を持つシェルでは、$ 1が最初の関数パラメータとして機能します。

関連する問題