2

次のようなスクリプトがあります。

test.sh

!/bin/bash                                                                  
for i in {0..10}                                                          
  do                                                                         
    echo "Welcome $i times"
  done

一度だけsh test.sh取得するように実行するとWelcome {0..10} times

ただし、bash test.sh取得したとおりに実行すると:

Welcome 0 times
Welcome 1 times
 .... and so on

また、redhat 端末で同じスクリプトを実行すると、. エラーが発生します:

root@UPLC-PPM-DEV-01 TEST]# sh test.sh 
'est.sh: line 3: syntax error near unexpected token `do
'est.sh: line 3: `  do

ここで何が問題なのですか?

4

2 に答える 2

3

使用するシェルを決定するか、bashまたはsh. bashには多くの構文拡張があり、そのうちの 1 つを示します。

今、あなたはするかもしれません:ls -l /bin/shそして見つけます:

lrwxrwxrwx. 1 root root 4 Apr 16 11:12 /bin/sh -> bash

shしかし、 と を交換できると思い込まないでくださいbash。このプログラムは、(C では、) によって呼び出された名前をチェックする一般的なトリックを使用しargv[0]ます。プログラムが名前で呼び出されると、shすべての拡張機能がオフになります。ページを引用するにはman

" bash が sh という名前で呼び出された場合、POSIX 標準にも準拠しながら、sh の歴史的なバージョンの起動動作を可能な限り模倣しようとします。 "

于 2013-08-15T07:50:37.937 に答える