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として呼び出すと、ディレクトリ内の各ファイルが別々の引数として渡されます。ホームディレクトリにfile1file2およびが含まれているとしますfile3。に電話すると、list ~/*実際に次のように電話することになります。

list ~/file1 ~/file2 ~/file3

これにより、forループは位置パラメータ1のみを渡すため、for item in ~/file1他の位置パラメータは使用されません。

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

おすすめ記事