在我的特定情况下,二进制文件是“星号”,但我使用不同的二进制文件(例如“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"
看: