Files
循環目錄中的每個文件,但在沒有文件時不拋出錯誤
我想根據 .profiles/ 目錄中的文件載入別名。
for profile in ~/.profiles/*; do for file in ~/.s1n7ax/$(basename $profile)/alias/*; do include "$file" done done
但是,當裡面沒有任何文件時,
~/.s1n7ax/$(basename $profile)/alias/*
它會引發錯誤。/home/s1n7ax/.zshrc:117: no matches found: /home/s1n7ax/.s1n7ax/work/alias/*
我想優雅地處理這個問題,而不會向 sdt 輸出錯誤。
預設情況下,
zsh
shell 會將不匹配的文件名通配模式視為致命的。如果您希望 glob 不匹配任何內容,那麼您可以使用 globbing 限定符使模式擴展為空而不是失敗:for profile in ~/.profiles/*(.N); do for file in ~/.s1n7ax/$profile:t/alias/*(.N); do include $file done done
N
這裡,如果沒有匹配的文件名,括號中的尾隨將使模式完全消失,從而導致相應的循環被跳過。點是另一個僅選擇正常文件的限定符。您是否還想匹配隱藏的名稱,您應該添加D
到限定符列表中。
N
限定符對模式的影響與在 shell 中設置shellnullglob
選項時的效果相同bash
,並且D
與 setting 具有相同的效果dotglob
。bash
除了迭代匹配的名稱並使用測試對每個名稱進行測試之外,該點沒有任何等價性-f
。
:t
末尾是“tail”的$profile
縮寫,將為您提供變數中路徑名的基本名稱。