
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 ubuntu/util.sh
答え1
期待されるbash実行可能ファイルを実行していますが、シェルは単純なbashではなく、sh
POSIX互換モードで実行されるbashです。これを呼び出したコマンドの名前を確認してこれを実行し、その場合はsh
自動的にPOSIXモードを有効にします。これは非常にうまく行われず、POSIX互換スクリプトのテストに完全に依存してはいけませんが、sh
許可される構文を大幅に制限する必要があります。
--posix
POSIX標準とは異なる動作をするbashのデフォルト動作を標準(posixモード)に合わせて変更します。 posix モードが bash の動作にどのように影響するかについて詳しくは、下記のドキュメントをご覧ください。
そしてからhttp://tiswww.case.edu/php/chet/bash/POSIX:
--posix
コマンドラインオプションでBashを起動するか、set -o posix
Bashの実行中に実行すると、Bashのデフォルト値が他の領域でPOSIXが指定したものと一致するように動作を変更し、BashがPOSIX標準に近づくようにします。呼び出されると、
sh
Bash は起動ファイルを読み込んで POSIX モードに入ります。