解析时,我在下面的bash shell脚本的第一行遇到了一个错误。
if [[ -v VAR_1 ]]; then VAR_2="$VAR_1/sub_folder" fi
这个脚本在我同事的Linux机器上运行良好,但在我的Macbook MacOS上失败了。错误消息为
conditional binary operator expected
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特定的命令和语法。
emulate sh
1条答案
按热度按时间f87krz0w1#
原来我的MacOS运行的是zsh而不是bash。
为了使这个脚本与bash和zshshell兼容,请使用下面的代码,它符合POSIX标准,可以在zsh和bash中使用。
或
理由:
[[命令是Bourne Again Shell(bash)的一个特性,它是[命令的扩展版本,也用于bash和其他Shell中的条件测试。
在Zsh中,[[是一个shell关键字,但默认情况下它的工作方式与bash中的不同。默认情况下,它在Zsh中用于不同的目的,这就是为什么我会得到错误"conditional binary operator expected"。
或者,
我还可以使用
emulate sh
命令告诉Zsh模拟Bourne shell(sh)的行为,包括bash,这样就可以在Zsh中使用[[和其他bash特定的命令和语法。