Я нашел это в сценарии оболочки, в параметре подстановки переменных с использованием символов заглавных букв может кто-нибудь объяснить логику этого nf = $ {f: gs ^ __ ^ / ^}
for f in notes__* books__*; do
nf=${f:gs^__^/^}
perl -p -e $f > /home/bob/$nf
done
Любая помощь была бы замечательной, спасибо.
Вы отметили свой вопрос как 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
для получения дополнительной информации.