我使用以下代码运行了一个奇怪的错误:
#!/usr/bin/env bash
a="a"
b="a"
if [ "$a" == "$b" ]
then
echo "Eq"
fi
chmod u+x script.sh
然后执行该文件将显示Eq
:
$ ./script.sh
Eq
但采购它会导致错误:
$ source script.sh
script.sh:6: = not found
您知道什么可能导致此错误吗?
答案1
当执行脚本时,您当前的 shell 将执行命令。在 zsh 中,您必须使用单个命令=
进行比较。
$ echo '[ a == a ]' | zsh
zsh: = not found
exit code: 1
$ echo '[ a = a ]' | zsh
$
答案2
答案:运行(源代码)代码的 shell 不是 bash。
如果您提供的代码位于名为 的文件内script.sh
,则会出现以下错误:
$ dash ./script.sh
./script.sh: 6: [: a: unexpected operator
$ zsh ./script.sh
./script.sh:6: = not found
这似乎证实您正在使用 zsh 提示符并获取脚本。重现:
$ zsh
$ . ./script.sh
./script.sh:6: = not found
如果交互式 shell 是 bash,则不会发生这种情况:
$ bash
$ . ./script.sh
Eq
另外,如果你使用 shebang 会更好#!/bin/bash
(并不是说它改变了我刚才解释的内容,但值得一提)。