シェルスクリプトで正規表現を確認すると、「権限が拒否されました」というメッセージが表示される

シェルスクリプトで正規表現を確認すると、「権限が拒否されました」というメッセージが表示される

次のシェルスクリプトを確認してください。

#!/bin/bash
check=yes
if [[ $check =~ yes|no ]]; then
    echo yes or no.
else
    echo I did not understood the pattern.
fi

私のOSXで実行すると、すべてが期待どおりに動作します。yes or nor.メッセージを残してください。ただし、Ubuntu 14.04.5 LTSサーバーで実行するとエラーが発生します。

teste.sh: 3: teste.sh: [[: Permission denied
teste.sh: 3: teste.sh: no: Permission denied
I did not understood the pattern.

OSXとUbuntuシェルのバージョンが確認されました。 OSXは以前のシェルバージョンを提供します。

[email protected]:/tmp/>$SHELL --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Copyright (C) 2007 Free Software Foundation, Inc.

Ubuntuでは:

t4h@web129:~$ $SHELL --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

私にとってシェル情報はあまり役に立ちません。

すべての* nixシステムで同じように実行され、他のシェルバージョンと互換性のあるシェルで正規表現をチェックする別の方法はありますか?

答え1

これはインタプリタとして使用する必要があるスクリプトですbashbash

を使用して実行するときはsh使用しませんbash。はい、一部はsh実際にbash偽装されていますが、問題ではありません(bashすべての場合に「通常」のように動作するわけではありません)。shandをまるでandbashのように相互排他的な通訳者として扱います(つまり、それらを混ぜようとしないでください)。perlpython

スクリプトの実行

$ bash teste.sh

または実行可能にして直接実行してください。

$ chmod +x teste.sh
$ ./teste.sh

最後のアプローチがより良いかもしれません。これにより、スクリプトは#!どのインタプリタを使用すべきかを -line で決定できます。

関連情報