将zsh循环转换为sh语法

时间:2019-07-02 20:30:08

标签: sh zsh

前一段时间,我用zsh脚本编写了这个循环,现在我不记得它的作用了,我需要转换此脚本才能在sh中运行。

for f in ${HOME}/.dotfiles/files/*(N) ${HOME}/.dotfiles/files/.*(N); do
    symlink_prompt $(basename $f)
done

有人可以帮助我了解它的作用以及如何使用sh语法复制它吗?

1 个答案:

答案 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