shell 脚本中 shell 命令中的变量未解析

Variables in shell command in shell script not resolving

这似乎是一个如此简单的修复,我有点不好意思问,但我无法在 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

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

有时我复制和粘贴语法,忘记将读取命令生成的变量与 shell 命令中实际使用的变量相匹配,但这里不是这种情况。

你不允许在这些语句中使用变量吗?或者更有可能,是否需要一些特殊的语法?我显然不能单引号,我试过双引号。这里是否有语法错误导致变量不能在命令中使用?

当你这样做的时候,就像你所做的那样,

sudo asterisk -rx 'sip show peer $peer'

单引号告诉 shell not 插入变量引用和类似的。如果你用双引号,它应该工作:

sudo asterisk -rx "sip show peer $peer"

您猜对了 - 使用双引号 - 但您将其添加到了错误的位置。