Function

For循環在帶參數的函式中不起作用

  • June 3, 2018

因此,我正在創建一個函式,該函式在目錄中的所有文件中作為給定參數執行 for 循環,並列印出所有文件和目錄:

#!/bin/bash

List () {
   for item in $1
           do
           echo "$item"
           done
}

List ~/*

但是,當我執行腳本時,它只會列印出目錄中的第一個文件。

有任何想法嗎?

如果您嘗試遍歷目錄中的文件,則需要像這樣 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,我完全錯過了。

引用自:https://unix.stackexchange.com/questions/447526