Конвертировать цикл zsh в синтаксис sh - PullRequest
0 голосов
/ 02 июля 2019

Некоторое время назад я написал этот цикл в сценарии zsh, и теперь я не помню, что он делает, и мне нужно преобразовать этот сценарий для запуска в sh.

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

Может ли кто-нибудь помочь мне понять, что это делает, и как я могу продублировать его в sh синтаксисе?

1 Ответ

2 голосов
/ 03 июля 2019

Спецификатор glob (N) приводит к полному исчезновению шаблона, если он не соответствует ни одному файлу.В оболочке POSIX нет прямого эквивалента;вместо этого вы должны просто проверить, действительно ли существует 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
...