【发布时间】:2020-08-13 02:40:55
【问题描述】:
我正在尝试实现 Bash 参数扩展技术来替换 Perl 脚本中文件的现有扩展名。
这是我用于替换文件扩展名的 bash 代码,它工作正常:
mv "$f" "${f%.*}.png"
另一方面,我正在尝试使用 system() 在 Perl 脚本中使用它:
system('mv', "$a/$fileName", "$a/${fileName%.*}".'.png');
$a 保存通过命令行参数传递的目录名称。
它抛出"syntax error near %",然后是"missing right curly or square bracket within string"。错误消息中没有 EOF。
当我不使用%.* 时,它只是在现有文件结束后附加.png,但它不会替换。一些帮助将不胜感激。
【问题讨论】:
-
system的多参数形式根本不运行 shell,因此不支持任何 shell 语法。无论如何,当你拥有 Perl 时,为什么还要使用 shell PE? Perl 更具表现力。 -
您好,感谢您提供的信息。我是 Perl 和 Bash 脚本的新手。我设法在 bash 中执行任务,但我无法在 Perl 中完成任务。有什么解决办法吗?
-
首先,不能保证
system会使用bash,所以如果你想确保你有bash执行代码,你应该明确地这样做。但是由于您确实在 Perl 中使用glob 函数进行了参数扩展(不是在 bash 中可用的全部范围,但至少在 POSIX shellx 中可用的范围),您可以考虑编写您的代码完全在 Perl 中,无需创建子进程。
标签: bash perl parameter-expansion