在bash脚本中使用双引号和单引号来调用程序

时间:2018-06-13 13:14:40

标签: bash shell command-line

我有一个带有几个参数的bash脚本。这个脚本做了一些工作,然后使用这两个参数打开另一个程序。 要打开该程序,该命令需要使用单引号和双引号,如下所示:

myprogram -a value1 -b 'Main("value2")'

但我无法用bash来解决这个问题。

当我把它放入我的剧本时:

myprogram -a $1 -b 'Main("$2")'

$ 2变量未展开。

有关如何实现这一目标的任何线索? 谢谢!

1 个答案:

答案 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\")"只是一个双引号带有两个转义双引号的字符串。