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其他位置參數未使用。

也要感謝 Ilkkachu 指出你也忘了/你的 hashbang 中的 a,我完全錯過了。

相關內容