用于将变量设置为命令输出的正确格式

时间:2017-09-29 18:54:58

标签: bash azure azure-cli azure-cli2

如果我从Azure CLI运行此命令,我会得到一个真假,具体取决于资源组是否确实存在。效果很好。

az group exists –n MyResourceGroup

它也适用于这种形式:

az group exists –n MyResourceGroup

如果在bash脚本中我尝试将变量设置为这些命令的输出:

GROUPEXISTS1="$(az group exists --name MyResourceGroup)"
GROUPEXISTS2="$(az group exists –n MyResourceGroup)"

只有第一个有效。当我使用-n时,我收到以下错误:

  

az:错误:无法识别的参数:-n MyResourceGroup

但是我知道该命令与-n参数一起使用。在#34; $()"中使用时,是否需要对单个短划线进行编码?为什么不接受这种形式?

2 个答案:

答案 0 :(得分:2)

看起来您的编辑器用短划线-替换了连字符减号(U + 002D)。这些是不同的字符。 Bash和其他类似unix的shell将dash视为常见字符,而不是选项的开头。 如果你有很多已编写的脚本文件,并且不知道是否有一些破折号而不是减号,你可以使用像

这样的命令自动转换它们。
sed -i 's/–/-/g' your-script-file

答案 1 :(得分:0)

您可以仔细检查脚本。 –n–n不同。在Azure Cloud Shell中,您可以清楚地看到差异。

enter image description here

修改您的脚本如下:

GROUPEXISTS2="$(az group exists -n MyResourceGroup)"