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

Bash variable in rename regex

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

rename 's/\d+/sprintf("%02d", $&)/e' *

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

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

rename 's/\d+/sprintf("%0'"$var"'d", $&)/e' *

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

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

您也可以通过环境传递值

env var=5 rename 's/\d+/sprintf("%0$ENV{var}d", $&)/e' *