我有一个带有几个参数的bash脚本。这个脚本做了一些工作,然后使用这两个参数打开另一个程序。 要打开该程序,该命令需要使用单引号和双引号,如下所示:
myprogram -a value1 -b 'Main("value2")'
但我无法用bash来解决这个问题。
当我把它放入我的剧本时:
myprogram -a $1 -b 'Main("$2")'
$ 2变量未展开。
有关如何实现这一目标的任何线索? 谢谢!
答案 0 :(得分:2)
对您的程序的调用应如下所示:
myprogram -a "$1" -b "Main(\"$2\")"
或
myprogram -a "$1" -b 'Main("'"$2"'")'
在这两个示例中,两个位置参数$1
和$2
都通过双引号来保护shell。这意味着shell不会在空格上拆分它们的值,也不会对它们的值执行文件名通配(如果它们包含文件名通配字符),但shell仍然会展开它们(在你的例子中) ,$2
周围的单引号可以防止shell看到$2
)。
'Main("'"$2"'")'
是三个字符串的串联:Main("
,$2
的引用值和")
,而"Main(\"$2\")"
只是一个双引号带有两个转义双引号的字符串。