将转义的引号作为shell脚本中的参数传递

时间:2015-05-07 03:09:19

标签: bash shell

我正在编写一个带有用户输入的shell脚本,如下所示:

echo -n "Enter string for Read Group parameter: "
read readgroup

我将此变量传递给另一个应用程序,该应用程序要求此参数为以@开头的字符串,并在命令行中用引号括起来。

这是正确的命令行语法:

application -R '@text'
application -R "@text"

如果在命令行上运行,这些命令会产生错误:

application -R @text
application -R "text"
application -R 'text'

在我的脚本中,我尝试在传递的变量中添加转义引号:

echo $readgroup
'@text'
application -R "$readgroup"    # error: does not start with @

或者在没有引号的情况下传递它:

echo $readgroup
@text
application -R "$readgroup"   # error: no parameter entry recognized
application -R \""$readgroup"\"   # error: does not start with @
application -R "'"'$readgroup'"'"   # error: does not start with @

尝试了stackoverflow的其他解决方案,如数组:

readgroup=("@text")
application -R "${readgroup[@]}"   # error: does not start with @

问题在于,当我在原始变量中包含引号或在命令调用中转义引号时,应用程序将其解释为文字字符串(例如,以引号开头因此无效,因为它必须以@开头)。但是,当我不包含引号时,它会返回错误,因为应用程序调用没有引号。

有没有办法强制shell将转义的引号(在脚本中)解释为实际的命令行引号(参数),或者在脚本的应用程序调用中显式添加引号?

或者是一种更好的方法,例如使用脚本参数?

感谢。

2 个答案:

答案 0 :(得分:0)

此处未指定应用程序环境,您是否可以详细说明您的应用程序及其环境。

您也尝试了application -R "@$readgroup"

答案 1 :(得分:0)

我认为eval "application -R '$readgroup'"与你在正确的命令行sytax中写的字面意思相同,因为它将整个命令作为字符串。

另一方面,可能会有一些棘手的问题。我认为在application内部,如果指定$readgroup是否有引号,则无法确定。最后main()只会被取消引用char *argv[]