
だから私は与えられた引数に従ってディレクトリ内のすべてのファイルに対して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に感謝します。