【发布时间】:2011-05-07 21:05:11
【问题描述】:
我有一些文件命名如下:file (2).jpg。我正在编写一个小的 Perl 脚本来重命名它们,但由于括号没有被替换,我得到了错误。 所以。有人可以告诉我如何转义字符串中的所有括号(和空格,如果它们引起问题),以便我可以将其传递给命令。脚本如下:
错误是这样的:
无法在 script.sh 行 [问题行] 处调用没有包或对象引用的方法“Q”。这是我第一次使用正则表达式,所以我正在寻找解释该做什么以及给出答案的答案。感谢您的帮助。
【问题讨论】:
-
Perl 中的字符串需要引号。 $pix2 = "\Q$pix\E";
-
愚蠢的我。你可以看出我以前从未使用过 Perl。
-
请注意,您应该使用
String::ShellQuote而不是\Q...\E来安全地转义文件名,请参阅stackoverflow.com/q/3796682/23118。 -
虽然在这种情况下,您可以通过在列表模式下使用系统来避免整个转义,
system("exiv2", "-r", "%Y_%m%d_%H%M%S", "$pix");。