
そこで、指定された引数としてディレクトリ内のすべてのファイルに対して for ループを実行し、すべてのファイルとディレクトリを出力する関数を作成しています。
#!/bin/bash
List () {
for item in $1
do
echo "$item"
done
}
List ~/*
しかし、スクリプトを実行すると、ディレクトリ内の最初のファイルのみが出力されます。
何か案は?
答え1
ディレクトリ内のファイルを反復処理する場合は、次のようにディレクトリを glob する必要があります。
#!/bin/bash
List () {
for item in "${1}/"*
do
echo "$item"
done
}
次のように呼び出します:
$ list ~
あるいは、複数のファイルを引数として渡す場合は、for
次のようにループを記述できます。
List () {
for item
do
echo "$item"
done
}
これは次のように呼び出すことができます。
$ list ~/*
現在の機能の何が問題なのでしょうか:
glob で呼び出すと、ディレクトリ内の各ファイルが個別の引数として渡されます。ホーム ディレクトリに、、、が含まれているとしますfile1
。file2
をfile3
呼び出すとlist ~/*
、基本的に次の呼び出しを行うことになります。
list ~/file1 ~/file2 ~/file3
すると、for
ループには位置パラメータ 1 のみが渡されfor item in ~/file1
、他の位置パラメータは使用されません。
/
また、ハッシュバングにa を忘れていたことを指摘してくれた Ilkkachu にも感謝します。私は完全に見逃していました。