我有一个perl脚本test.pl,它从命令行读取参数
#!/usr/bin/perl -w
for( @ARGV ) { print( "$_\n" ) } ;
当我传递" a b"等参数时,这很有效。 " c d" e在命令行上 结果是:
a b
c d
e
如果我声明一个变量
X='"a b" "c d" e'
然后运行
test.pl $X
我得到了
"a
b"
"c
d"
e
我需要从各种shell脚本中运行perl脚本作为辅助函数,参数由这些脚本计算。
参数计数不固定,所以我必须将其作为列表传递
唉,我找不到让perl程序按需要处理我的参数的方法
我曾想过通过文件传递参数,但是从命令行手动调用perl脚本变得很尴尬。
如何让perl脚本保留参数中的空格?
答案 0 :(得分:2)
如果你正在使用bash,你可以考虑使用array variable来保存参数,以防止在将变量替换为test.pl
命令调用时丢失信息:
declare -a X=("a b" "c d" e)
test.pl "${X[@]}"
如果有帮助,你可以逐个构建阵列:
X=("a b")
X+=("c d")
X+=("e")
答案 1 :(得分:2)
问题是shell。执行
./test.pl "$X"
将给shell一个参数。一种解决方案是使用
/bin/bash -c "./test.pl $X"
HTH 乔治
答案 2 :(得分:0)
感谢@all的提示。 从shell传递的参数似乎并不像我想象的那么容易。 因此我在perl程序中添加了另一个参数,告诉它从文件而不是命令行读取参数。 这可以像期望的那样工作并绕过shell的解释。