
因此,我正在創建一個函數,該函數作為給定參數在目錄中的所有文件中執行 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
其他位置參數未使用。
也要感謝 Ilkkachu 指出你也忘了/
你的 hashbang 中的 a,我完全錯過了。