Shell-Script
遍歷目錄中的所有內容?
好的,在此立即作為副本關閉之前,讓我解釋一下。我嘗試了很多方法,例如:
for d in /Applications ; do echo "$d" done
但這又回來了
/應用
而不是 /Applications 的內容。
我也試過:
#!/bin/bash FILES=/Applications for file in $FILES do echo $file done
這基本上是一樣的。不過,我注意到,當我這樣做時:
#!/bin/bash for file in * do echo $file done
它正確地回顯了我的主文件夾中的所有文件夾。有誰知道發生了什麼?
這
*
被稱為 shell globbing(路徑名擴展)運算符(?
也[]
稱為),當您不加引號呼叫它時,它將擴展到目前目錄中的所有文件(沒有任何目錄前綴)。如果您使用前綴例如/foo/*
,它將擴展到目錄中的所有文件/foo
。請注意,它也用於匹配某些文件,例如僅匹配以目前目錄開頭
foo
和結尾的文件,請使用 glob 模式:bar
foo*bar
因此,
for
循環現在可以採用以下形式:for f in foo*bar; do echo "$f"; done
閱讀
man
您的 shell 頁面以了解有關 shell globbing 的更多資訊。
要遍歷目錄中的文件(和子目錄),您可以使用
for file in /Applications/* do echo "$file" done
請注意,如果未找到匹配項,則該
file
變數將按/Applications/*
字面意思包含字元串(帶有星號),如果以下命令需要現有路徑,這可能會導致錯誤。如果在沒有文件匹配的情況下您不想做任何事情,您可以使用以下nullglob
選項:shopt -s nullglob for file in /Applications/* do echo "$file" done