我正在编写一个带有用户输入的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将转义的引号(在脚本中)解释为实际的命令行引号(参数),或者在脚本的应用程序调用中显式添加引号?
或者是一种更好的方法,例如使用脚本参数?
感谢。
答案 0 :(得分:0)
此处未指定应用程序环境,您是否可以详细说明您的应用程序及其环境。
您也尝试了application -R "@$readgroup"
答案 1 :(得分:0)
我认为eval "application -R '$readgroup'"
与你在正确的命令行sytax中写的字面意思相同,因为它将整个命令作为字符串。
另一方面,可能会有一些棘手的问题。我认为在application
内部,如果指定$readgroup
是否有引号,则无法确定。最后main()
只会被取消引用char *argv[]
!