将参数从shell脚本传递到perl程序不会';t保持空间
我有一个perl脚本test.pl,它从命令行读取参数将参数从shell脚本传递到perl程序不会';t保持空间,perl,shell,Perl,Shell,我有一个perl脚本test.pl,它从命令行读取参数 #!/usr/bin/perl -w for( @ARGV ) { print( "$_\n" ) } ; 当我在命令行上传递诸如“ab”“cd”e之类的参数时,这种方法效果很好 结果是: a b c d e 如果我声明一个变量 X='"a b" "c d" e' 然后跑 test.pl $X 我明白了 我需要从各种shell脚本中运行perl脚本作为帮助函数,这些脚本计算参数。 参数计数不是固定的,因此我必须将其作为列表传递。
#!/usr/bin/perl -w
for( @ARGV ) { print( "$_\n" ) } ;
当我在命令行上传递诸如“ab”“cd”e之类的参数时,这种方法效果很好结果是:
a b
c d
e
如果我声明一个变量
X='"a b" "c d" e'
然后跑
test.pl $X
我明白了
我需要从各种shell脚本中运行perl脚本作为帮助函数,这些脚本计算参数。参数计数不是固定的,因此我必须将其作为列表传递。
唉,我找不到让perl程序按需要处理我的参数的方法。
我曾想过通过文件传递参数,但随后从命令行手动调用perl脚本变得很尴尬。
如何让Perl脚本保留参数中的空格?如果使用BASH,可以考虑使用AN来保存参数,以防止在变量被替换为
declare -a X=("a b" "c d" e)
test.pl "${X[@]}"
如果有帮助,您可以逐块构建阵列:
X=("a b")
X+=("c d")
X+=("e")
问题在于外壳。执行
./test.pl "$X"
将为shell提供一个参数。一种解决办法是使用
/bin/bash -c "./test.pl $X"
嗯
乔治谢谢@all的提示。
从shell传递参数似乎不像我想象的那么容易。
因此,我在perl程序中添加了另一个参数,它告诉程序从文件而不是命令行读取参数。
这与所需的类似,并避免了shell解释。在
perl
脚本中传递的参数保存在@ARGV
数组中
因此,当您打印时,它会从该数组中给出值,并将其打印为不同的参数,因为它不会保留参数之间的空间,空格用于标识不同的参数。在命令行上传递参数的可能重复项可以正常工作,正如我上面所描述的。不起作用的是通过变量传递参数。在命令行上传递参数可以正常工作,正如我上面所描述的。因此,这不是上述问题的重复。我认为您有语法错误,您是指/test.pl“$X”
还是/usr/bin/perl test.pl“$X”
。您完全正确。否则,这只在test.pl位于路径中时才起作用。我猜我用bash尝试了数组,它起作用了。不幸的是,为了向后兼容,我需要使用ksh,但它在那里不起作用。因此,我正在寻找一种简单的方法来让我的perl程序区分来自STDIN的输入(我将使用它从ksh脚本调用)和来自命令行参数的输入(我将使用这些参数进行交互调用)。您使用的是哪一版本的Korn shell?也许值得为这个问题添加细节。
/bin/bash -c "./test.pl $X"