подстановка переменных

Я нашел это в сценарии оболочки, в параметре подстановки переменных с использованием символов заглавных букв может кто-нибудь объяснить логику этого nf = $ {f: gs ^ __ ^ / ^}

for f in  notes__* books__*; do
    nf=${f:gs^__^/^}
    perl -p -e $f > /home/bob/$nf
  done

Любая помощь была бы замечательной, спасибо.

0
задан 4 June 2021 в 16:26

1 ответ

Вы отметили свой вопрос как bash , так и zsh , однако, AFAIK синтаксис : s поддерживается только в zsh (заимствовано из csh ). Эквивалент bash будет $ {f // __ / \ /} - который также поддерживается в zsh (и заимствован из ksh ).

: gs вводит g lobal s ubstitution внутри расширения параметров. ^ - произвольный (задаваемый пользователем) разделитель - обычно выбирается / , но в этом случае кажется, что текст замены - / , поэтому ^ выбран вместо этого. Таким образом, данный

f=notes__foo__bar

$ {f: gs ^ __ ^ / ^} глобально заменяет __ на / :

 % echo ${f:gs^__^/^}
notes/foo/bar

Обратитесь к man zshexpn для получения дополнительной информации.

4
ответ дан 28 July 2021 в 11:32

Другие вопросы по тегам:

Похожие вопросы: