bash shell [[操作符失败,错误为:“需要条件二元运算符”

kokeuurv  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(436)

解析时,我在下面的bash shell脚本的第一行遇到了一个错误。

if [[ -v VAR_1 ]]; then
    VAR_2="$VAR_1/sub_folder"
  fi

这个脚本在我同事的Linux机器上运行良好,但在我的Macbook MacOS上失败了。
错误消息为

conditional binary operator expected
f87krz0w

f87krz0w1#

原来我的MacOS运行的是zsh而不是bash。
为了使这个脚本与bash和zshshell兼容,请使用下面的代码,它符合POSIX标准,可以在zsh和bash中使用。

if [ -v VAR_1 ]; then
    VAR_2="$VAR_1/sub_folder"
  fi

if test -v VAR_1 ; then

理由:
[[命令是Bourne Again Shell(bash)的一个特性,它是[命令的扩展版本,也用于bash和其他Shell中的条件测试。
在Zsh中,[[是一个shell关键字,但默认情况下它的工作方式与bash中的不同。默认情况下,它在Zsh中用于不同的目的,这就是为什么我会得到错误"conditional binary operator expected"。
或者,
我还可以使用emulate sh命令告诉Zsh模拟Bourne shell(sh)的行为,包括bash,这样就可以在Zsh中使用[[和其他bash特定的命令和语法。

相关问题