sh執行shell指令碼出現語法錯誤
阿新 • • 發佈:2019-01-30
今天除錯一個指令碼,用./的方式直接執行指令碼沒有發現任何問題,但是當我用如下命令列印除錯資訊的時候就會發現各種問題:
sh -x sample.sh
下面給出sample.sh
#!/bin/bash
hello(){
echo "Hello, this is a function."
}
if [ ! -z $1 ] && [ $1 == '1' ] ; then
hello
else
echo "no argument."
fi
通過sh執行發現報如下錯誤:
但是用./sample.sh方式執行卻不會發生任何錯誤,也就是說指令碼的自身執行是沒有問題的,執行sh程式的時候才會有語法錯誤。sample.sh: 3: sample.sh: Syntax error: "(" unexpected
其實語法錯誤的原因在於兩次執行的不是同一種shell,在用./sample的方式執行的時候,系統會使用指令碼首行宣告的/bin/bash來解釋指令碼,而用sh方式執行的時候,系統會呼叫sh這個程式,在我的機器上看一下sh這個程式的來源:
[email protected]:~$ ll `which sh`
lrwxrwxrwx 1 root root 4 11月 9 10:17 /bin/sh -> dash*
表明sh實際上是dash,和./sample.sh方式使用的並不是同一種shell,所以才會發生奇怪的語法錯誤。