我有一个处理一堆文件名的 Perl 脚本,并在反引号内使用这些文件名。但文件名包含空格、撇号和其他时髦字符。
我希望能够正确地逃避它们(即不使用我头顶上的随机正则表达式)。是否有一个 CPAN 模块可以正确转义字符串以在 bash 命令中使用?我知道我过去已经解决了这个问题,但这次我找不到任何东西。似乎关于它的信息很少。
最佳答案
如果您可以管理它(即,如果您直接调用某些命令,没有任何 shell 脚本或高级重定向恶作剧),最安全的做法是避免完全通过 shell 传递数据。
在 perl 5.8+ 中:
my @output_lines = do {
open my $fh, "-|", $command, @args or die "Failed spawning $command: $!";
<$fh>;
};
如果需要支持5.6:
my @output_lines = do {
my $pid = open my $fh, "-|";
die "Couldn't fork: $!" unless defined $pid;
if (!$pid) {
exec $command, @args or die "Eek, exec failed: $!";
} else {
<$fh>; # This is the value of the C<do>
}
};
见
perldoc perlipc
有关此类业务的更多信息,另请参阅 IPC::Open2
和 IPC::Open3
.
关于perl - 如何安全地将带空格的文件名传递给 Perl 中的外部命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267669/