重命名正则表达式中的 Bash 变量

Sol*_*ris 0 regex bash rename batch-rename

我正在编写一个 bash 脚本来重命名文件名并使用命令

rename 's/\d+/sprintf("%02d", $&)/e' *
Run Code Online (Sandbox Code Playgroud)

但是想用“%0”$var“d”之类的东西替换“%02d”,从而用$var替换“2”,但它似乎不起作用,我不精通正则表达式以及如何使用转义 \ 并希望得到帮助

bip*_*pll 5

当然,您的整个表达式都在单引号内,其中不执行扩展。要展开命令的一部分,请将其移出引号:

rename 's/\d+/sprintf("%0'"$var"'d", $&)/e' *
Run Code Online (Sandbox Code Playgroud)

或者将整个表达式放在双引号中,但是你需要转义更多:

rename "s/\\d+/sprintf(\"%0${var}d\", \$&)/e" *
Run Code Online (Sandbox Code Playgroud)