== 上的 Exec 与源错误

== 上的 Exec 与源错误

我使用以下代码运行了一个奇怪的错误:

#!/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(并不是说它改变了我刚才解释的内容,但值得一提)。

相关内容