在互聯網上收集知識我發現這種將檔案采購到 .zshrc 的方法對我來說非常方便。但我的問題是這個 for 回圈將如何作業以及首先加載哪些檔案?例如,如果我有一個名為 0_alias.zsh 的檔案,然后是 1_options.zsh。名稱為 0 的檔案會第一次加載嗎?
function src {
[[ -r "$1" ]] && source "$1"
}
if [[ -d ~/.config/.zshell/func.d/ ]]; then
for func in ~/.config/.zshell/func.d/*.zsh; do
src "$func"
done
unset func
fi
uj5u.com熱心網友回復:
Zsh glob 限定符包括一些選項來使用限定符控制擴展檔案名的排序oX
。不幸的是,它們只包括諸如按檔案大小或最后修改的時間戳排序之類的東西,而不是“版本排序”,其中數字的運行是按數字排序而不是按字典順序排序的。但是,引數擴展標志 確實包含這樣一個排序選項,因此您可以將其分解為幾個步驟:
# Array of all expanded filenames
files=( ~/.config/.zshell/func.d/*.zsh )
# Iterate over all elements of the array in "version" order
for func in ${(n)files[@]}; do
# stuff
done
通過這種方式,您可以按所需順序獲取檔案,而不必求助于使用前導 0 填充名稱以使它們按字典順序排序。
例子:
$ files=( *.zsh )
# Default lexicographic order
$ print ${files[@]}
0_foo.zsh 123_quux.zsh 1_bar.zsh 23_baz.zsh
# "Version" order
$ print ${(n)files[@]}
0_foo.zsh 1_bar.zsh 23_baz.zsh 123_quux.zsh
但是忘記這一切。
@Gairfowl 提到了一個numeric_glob_sort
選項。事實證明,可以只為限定符中的單個擴展打開它 - 這不是oX
排序選項,這就是我之前錯過它的原因。所以你真正需要的是:
for func in ~/.config/.zshell/func.d/*.zsh(n); do
# stuff
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/503767.html