bashをシェルとして構成したと思いますが、なぜこれが発生するのですか?
私のシェルはbashです:
# ls -al `which sh`
lrwxrwxrwx 1 root root 4 Jul 12 03:25 /bin/sh -> bash
sh
を使用したスクリプトの実行中にエラーが発生しました# sh ubuntu/util.sh
ubuntu/util.sh: line 32: `test-build-release': not a valid identifier
bashからのエラーはありません
# bash ubuntu/util.sh
承認された回答:
期待するbash実行可能ファイルを実行していますが、シェルは単なるbashではありません。 POSIX sh
で実行されているbashです。 互換モード。これは、呼び出されたコマンド名を確認し、それがsh
の場合に実行されます。 、その後、POSIXモードを自動的にアクティブにします。これは非常にひどい仕事をしているので、POSIX sh
のテストに完全に依存すべきではありません。 互換性のあるスクリプトですが、許可される構文を大幅に制限する必要があります。
–posix
デフォルトの動作がPOSIX標準と異なる場合のbashの動作を、標準(posixモード)に一致するように変更します。
posixモードがbashの動作にどのように影響するかを詳しく説明しているドキュメントへの参照については、以下の参照も参照してください。
そしてhttp://tiswww.case.edu/php/chet/bash/POSIXから:
--posix
でBashを開始する コマンドラインオプションまたはset
の実行 Bashの実行中は、Bashのデフォルトが異なる領域でPOSIXによって指定された
-o posix
に一致するように動作を変更することにより、BashがPOSIX標準により厳密に準拠するようになります。
sh
として呼び出された場合 、Bashはスタートアップ
ファイルを読み取った後にPOSIXモードに入ります。