我有一个调用perl脚本的shell脚本。 shell脚本是一个包装器,它构建要传递给perl脚本的参数。 perl脚本使用给定的参数执行一些代码。
shell脚本就是这样。
#!/bin/bash
value=1
opt2value="someValue"
params="-opt3 someOption"
if [ $value = 1 ]
then
params=${params}" -opt4 Y -opt5 \"This is 1\""
elif [ $value = 2 ]
then
params=${params}" -opt4 Y -opt5 \"This is 2\""
else
params=${params}" -opt4 N"
fi
perl -E'say for 0+@ARGV, @ARGV;' -- -opt1 optValue -opt2 ${opt2value} ${params}
Perl脚本检索传递的所有其他参数,但是它只检索“这的opt5参数而不是传递的整个值。
用于检索值的perlScript
use Getopt::Long;
$result = GetOptions(
"opt1=s" => \$opt1,
"opt2=s" => \$opt2,
"opt3=s" => \$opt3,
"opt4=s" => \$opt4,
"opt5=s" => \$opt5
}
我该怎么做?感谢。
答案 0 :(得分:1)
选项1:eval
。
更灵活。 (类似于Perl的system($SHELL_COMMAND)
。)
#!/bin/bash
value=1
opt2value="someValue"
params="-opt3 someOption"
if [ "$value" = 1 ]
then
params="$params -opt4 Y -opt5 \"This is 1\""
elif [ "$value" = 2 ]
then
params="$params -opt4 Y -opt5 \"This is 2\""
else
params="$params -opt4 N"
fi
eval "perl -E'say for 0+@ARGV, @ARGV;' -- "\
"-opt1 optValue -opt2 $opt2value $params"
选项2:数组。
简单。 (类似于Perl的system($PROG, @ARGS)
。)
#!/bin/bash
value=1
opt2value="someValue"
params=(-opt3 someOption)
if [ "$value" = 1 ]
then
params=("${params[@]}" -opt4 Y -opt5 "This is 1")
elif [ "$value" = 2 ]
then
params=("${params[@]}" -opt4 Y -opt5 "This is 2")
else
params=("${params[@]}" -opt4 N)
fi
perl -E'say for 0+@ARGV, @ARGV;' -- \
-opt1 optValue -opt2 "$opt2value" "${params[@]}"
输出:
10
-opt1
optValue
-opt2
someValue
-opt3
someOption
-opt4
Y
-opt5
This is 1