【问题标题】:Pass parameter value with a space to a Perl Script built from a Shell Script将带有空格的参数值传递给从 Shell 脚本构建的 Perl 脚本
【发布时间】:2013-04-03 15:07:22
【问题描述】:

我有一个调用 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 参数的 "This,而不是传递的整个值。

用于检索值的 perlScript

use Getopt::Long;
$result = GetOptions(
"opt1=s"  => \$opt1,
"opt2=s"  => \$opt2,
"opt3=s"  => \$opt3,
"opt4=s"  => \$opt4,
"opt5=s"  => \$opt5
}

我该怎么做。谢谢。

【问题讨论】:

  • 然后呢???????????
  • 代码是这样的。
  • 对不起。太早点击保存按钮
  • 你确定整个" -option2 Y -option3 \"This is 2\"" 都被传递给 perl 脚本了吗?
  • @Miguel Prz,对于初学者来说,Perl 脚本无法区分 script ... "This is 2"script ... This is 2

标签: bash shell command-line-arguments


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多