次のコードを実行すると、奇妙なエラーが発生しました。
#!/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
(今説明した内容が変わるわけではありませんが、言及する価値があります)。