这看起来像是一个简单的修复程序,我有点不好意思问,但是我很难在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命令中实际使用的变量匹配,但这不是这种情况。
您是否不允许在这些语句中使用变量?或更可能是需要某些特殊语法吗?我显然不能单引号,而我尝试了双引号。此处是否存在语法错误,导致该变量无法在命令中使用?
答案 0 :(得分:1)
像以前一样,
sudo asterisk -rx 'sip show peer $peer'
单引号告诉外壳不插值变量引用和类似内容。如果您使用单引号将其执行,那么它应该可以工作:
sudo asterisk -rx "sip show peer $peer"
您有正确的猜测-使用双引号-但您将其添加到错误的位置。