安装Influxdb2.0时出现zsh bad substitution错误

Zsh bad substitution error when installing Influxdb2.0

我正在按照此 article 中的安装说明进行操作,但是在执行此命令时我从 zsh 中得到了 bad substitution error

export DISTRIB_ID=$(lsb_release -si); export DISTRIB_CODENAME=$(lsb_release -sc)
echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.gpg] https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list > /dev/null

我应该为 zsh 更改什么?

${DISTRIB_ID,,} 是一个 Bash 特定的参数扩展,以小写变量的值。

https://askubuntu.com/a/383360/25077建议${(L)DISTRIB_ID}作为Zsh中的对应操作。

但是没有真正的理由使用任何特定于 shell 的结构;该操作在 POSIX sh 中也很容易移植(尽管以外部进程为代价)。

无论如何,除非有其他需要,这里的 export 语句也是不必要的。另见 Correct Bash and shell script variable capitalization

distrib_id=$(lsb_release -si | tr A-Z a-z)
distrib_codename=$(lsb_release -sc)
echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.gpg] https://repos.influxdata.com/$distrib_id $distrib_codename stable" | sudo tee /etc/apt/sources.list.d/influxdb.list > /dev/null

正如原文post中的注释所说,${DISTRIB_ID,,}在bash中用于扩展小写参数。 ${DISTRIB_ID:l}.

在 zsh 中也是如此

所以 zsh 中的整个工作命令是:

export DISTRIB_ID=$(lsb_release -si); export DISTRIB_CODENAME=$(lsb_release -sc)
echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.gpg] https://repos.influxdata.com/${DISTRIB_ID:l} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list > /dev/null