ソースエラーがある==実行

ソースエラーがある==実行

次のコードを実行すると、奇妙なエラーが発生しました。

#!/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

スクリプトが実行されると、現在のシェルはコマンドを実行します。 zshでは、=比較するには単一のコマンドを使用する必要があります。

$ echo '[ a == a ]' | zsh
zsh: = not found
exit code: 1
$ echo '[ a = a ]' | zsh
$

答え2

答え:(ソース)コードを実行するシェルは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

対話型シェルがbashの場合、これは発生しません。

$ bash
$ . ./script.sh
Eq

また、shebangを使用する方が良いでしょう#!/bin/bash(今説明した内容が変わるわけではありませんが、言及する価値があります)。

関連情報