shell脚本中的shell命令中的变量无法解析

时间:2019-06-27 13:20:25

标签: bash quotes

这看起来像是一个简单的修复程序,我有点不好意思问,但是我很难在shell命令中获取要解析的变量:

read -r -p "SIP Peer name (e.g. ATAx1): " peer
status=`sudo asterisk -rx 'sip show peer $peer' | grep -i "status"`

我也尝试在$ peer周围加上诸如“ $ peer”的引号,但结果是相同的:

SIP Peer name (e.g. ATAx1): ATAx1
SIP Peer status for ATAx1:
Press ENTER to return:

对于踢球,我尝试像这样对它进行硬编码:

status=`sudo asterisk -rx 'sip show peer ATAx1' | grep -i "status"`

瞧!

SIP Peer name (e.g. ATAx1): ATAx1
SIP Peer status for ATAx1:   Status       : UNKNOWN

有效!是的,状态应该为“未知”。但更重要的是,为什么变量$ peer在这里不起作用?

有时候我会复制并粘贴语法,而忘记将read命令生成的变量与shell命令中实际使用的变量匹配,但这不是这种情况。

您是否不允许在这些语句中使用变量?或更可能是需要某些特殊语法吗?我显然不能单引号,而我尝试了双引号。此处是否存在语法错误,导致该变量无法在命令中使用?

1 个答案:

答案 0 :(得分:1)

像以前一样,

sudo asterisk -rx 'sip show peer $peer'

单引号告诉外壳插值变量引用和类似内容。如果您使用单引号将其执行,那么它应该可以工作:

sudo asterisk -rx "sip show peer $peer"

您有正确的猜测-使用双引号-但您将其添加到错误的位置。