次のシェルスクリプトを確認してください。
#!/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
これはインタプリタとして使用する必要があるスクリプトですbash
。bash
を使用して実行するときはsh
使用しませんbash
。はい、一部はsh
実際にbash
偽装されていますが、問題ではありません(bash
すべての場合に「通常」のように動作するわけではありません)。sh
andをまるでandbash
のように相互排他的な通訳者として扱います(つまり、それらを混ぜようとしないでください)。perl
python
スクリプトの実行
$ bash teste.sh
または実行可能にして直接実行してください。
$ chmod +x teste.sh
$ ./teste.sh
最後のアプローチがより良いかもしれません。これにより、スクリプトは#!
どのインタプリタを使用すべきかを -line で決定できます。