我想根据 .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 限定符使模式扩展为空而不是失败:N
这里,如果没有匹配的文件名,括号中的尾随将使模式完全消失,从而导致相应的循环被跳过。点是另一个仅选择常规文件的限定符。您是否还想匹配隐藏的名称,您应该添加D
到限定符列表中。N
限定符对模式的影响与在 shell 中设置shellnullglob
选项时的效果相同bash
,并且D
与 setting 具有相同的效果dotglob
。bash
除了迭代匹配的名称并使用测试对每个名称进行测试之外,该点没有任何等价性-f
。:t
末尾是“tail”的$profile
缩写,将为您提供变量中路径名的基本名称。