我想将包含“文本名称 [1].m4a”之类的文件重命名为“文本名称 [01].m4a”。
一开始,我写道:
rename -n "s/\[(\d)\]/\[0$1\]/" *.m4a
该命令[0]
改为显示[01]
.如果我替换$1
为\1
,它会按预期工作。
rename -n "s/\[(\d)\]/\[0\1\]/" *.m4a
但有警告\1 better written as $1 at (eval 5) line 1.
为什么第一个命令不起作用,我该如何重写它?
我正在使用File::Rename version 0.20
与Ubuntu 18.04.4 LTS
.
答案1
在 中"...$1..."
,带双引号,shell 替换$1
为值它是(shell 的)变量,在将字符串传递给 之前该变量为空rename
。因此rename
只能看到[0]
并相应地执行替换。
要使 shell$1
按字面意思传递给rename
,请使用单引号而不是双引号(正如 Freddy 提到的,您也不需要转义替换字符串中的括号)。