在 bash shell 中运行带有多个附加参数的二进制文件是可行的,但如果参数被打包在变量中则不行

在 bash shell 中运行带有多个附加参数的二进制文件是可行的,但如果参数被打包在变量中则不行

在我的特定情况下,二进制文件是“星号”,但我使用不同的二进制文件(例如“fs_cli”)测试了其他场景,结果是相同的。简而言之,如果我执行:

asterisk -rx 'core show version'

运行正常,并产生了预期的结果(返回版本)。但是,如果我尝试以下操作:

var='core show version';asterisk -rx $var

它失败了。我测试了 var 的许多不同变体,例如:

var="'core show version'"
var="\'core show version\'"
var='"core show version"'

还有一些,但总是失败。在我的测试中,很明显,结果就像我只给二进制文件第一个参数一样。换句话说,如果我执行,结果将是相同的:

asterisk -rx core

或者

asterisk -rx core show version # with no quotes 

二进制文件在“-rx”后需要 1 个且只有一个参数。如果需要传递更多参数,请将它们放在“”或“”中,这样​​它们将作为一个参数传递。但我无法使用变量来实现这一点。看起来当我使用变量时,由于某种原因,shell 会始终删除引号并将字符串作为多个参数而不是一个参数传递。希望有解决方案并有人能帮助我?有几种使用此类语法的用例,但我不想用这些细节使问题过于复杂。简而言之:我想在带有人工输入的脚本中使用它。
谢谢!

答案1

这不是定义需要引用,它是变量扩张: 代替:

var='core show version';asterisk -rx $var

像这样:

var='core show version';asterisk -rx "$var"

看:

相关内容