将参数从shell脚本传递给perl程序不会保留空格

时间:2016-12-20 12:16:42

标签: perl shell

我有一个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脚本保留参数中的空格?

3 个答案:

答案 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的解释。