我在 shell 脚本中发现了这一点,在变量替换选项中使用大写符号,有人能解释一下这个 nf=${f:gs^__^/^} 的逻辑吗
for f in notes__* books__*; do
nf=${f:gs^__^/^}
perl -p -e $f > /home/bob/$nf
done
任何帮助都将非常有帮助,谢谢。
答案1
您在问题中标记了 和bash
,zsh
但据我所知,该:s
语法仅在 中受支持zsh
(借用自csh
)。 bash 等效语法是${f//__/\/}
- ,它也在 zsh 中受支持(并借用自ksh
)。
:gs
引入了G全球化s参数扩展中的 ubstitution。^
是一个任意的(用户提供的)分隔符 - 通常的选择是/
,但在这种情况下,替换文本似乎是,/
所以^
选择的是。所以给定
f=notes__foo__bar
${f:gs^__^/^}
全局替换__
为/
:
% echo ${f:gs^__^/^}
notes/foo/bar
请参阅man zshexpn
以了解更多详细信息。