我想使用 perl 单线计算使用正则表达式替换的结果文件名。当进行试运行并简单地打印结果时,它会给我想要的结果(那里还没有引号):
for i in *_\ *; do echo "${i}" $(perl -ne 'print s/(?<![_ ])_ /-/gr' <<< "${i}"); done
但是当更改为mv
它时,它会中断:
for i in *_\ *; do mv "${i}" $(perl -ne 'print s/(?<![_ ])_ /-/gr' <<< "${i}"); done
mv: target ‘9781430249146.pdf’ is not a directory
显然 perl 的输出被重新解释并且空格导致问题。当我在它周围加上双引号时,perl 代码首先由 bash 评估,这会产生另一个问题:
for i in *_\ *; do mv "${i}" "$(perl -ne 'print s/(?<![_ ])_ /-/gr' <<< "${i}")"; done
-bash: ![_: event not found
有什么方法可以仅引用命令替换的输出(而不是命令本身)?