变量替换

变量替换

我在 shell 脚本中发现了这一点,在变量替换选项中使用大写符号,有人能解释一下这个 nf=${f:gs^__^/^} 的逻辑吗

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

任何帮助都将非常有帮助,谢谢。

答案1

您在问题中标记了 和bashzsh但据我所知,该: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以了解更多详细信息。

相关内容