前一段时间,我用zsh
脚本编写了这个循环,现在我不记得它的作用了,我需要转换此脚本才能在sh
中运行。
for f in ${HOME}/.dotfiles/files/*(N) ${HOME}/.dotfiles/files/.*(N); do
symlink_prompt $(basename $f)
done
有人可以帮助我了解它的作用以及如何使用sh
语法复制它吗?
答案 0 :(得分:2)
全局限定符(N)
会导致该模式在与任何文件都不匹配时完全消失。 POSIX shell中没有直接等效的东西。相反,您应该只检查f
是否确实存在,如果不存在,则继续。 (如果该模式无法匹配任何文件,则f
会将文字模式作为其值。)
for f in "$HOME"/.dotfiles/files/* "$HOME"/.dotfiles/files/.*; do
[ -e "$f" ] || continue
symlink_prompt "$(basename "$f")"
done
如果您实际上在使用bash
,则可以设置nullglob
选项。
shopt -s nullglob
for f in "$HOME"/.dotfiles/files/* "$HOME"/.dotfiles/files/.*; do
symlink_prompt "$(basename "$f")"
done