引数付きの関数で for ループが機能しない

引数付きの関数で for ループが機能しない

そこで、指定された引数としてディレクトリ内のすべてのファイルに対して 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 で呼び出すと、ディレクトリ内の各ファイルが個別の引数として渡されます。ホーム ディレクトリに、、、が含まれているとしますfile1file2file3呼び出すとlist ~/*、基本的に次の呼び出しを行うことになります。

list ~/file1 ~/file2 ~/file3

すると、forループには位置パラメータ 1 のみが渡されfor item in ~/file1、他の位置パラメータは使用されません。

/また、ハッシュバングにa を忘れていたことを指摘してくれた Ilkkachu にも感謝します。私は完全に見逃していました。

関連情報