我寫了一個腳本,其中「CASE」部分標識輸入的字節/字符是Lower,Upper,digit還是一些特殊字符。程序運行良好,但奇怪的是;當我輸入字母「A」,並運行CASE在調試和正常模式下表現不同
sh -x ./scrip "A"
輸出
+ [ 1 -ne 1 ]
+ char=A
+ wc -c
+ echo A
+ NumOfChars=2
+ [ 2 -gt 2 ]
+ echo Arguments are correct in numbers
Arguments are correct in numbers
+ echo Upper case alphabet
Upper case alphabet
是正確的(即,殼體[AZ]執行
輸出但是,當我執行該程序是正常的方式即
./script "A"
輸出
Lower case alphabet
而是執行CASE [a-z],爲什麼?
的腳本如下
if [ "$#" -ne 1 ]; then
echo "Number of arguments are wrong"
exit 1;
else
char="$1"
NumOfChars=$(echo "$char" | wc -c)
if [ "$NumOfChars" -gt 2 ]; then
echo "Number of characters are greater then one"
exit 2;
else
echo " Arguments are correct in numbers ";
fi
fi
case "$char"
in
[a-z]) echo "Lower case alphabet";;
[A-Z]) echo "Upper case alphabet";;
[0-9]) echo "Digit";;
*) echo "Non AlphaNumeric characters/byte";;
esac
的腳本輸出在這兩種情況下'小寫alphabet'。也許你實際上調用了不同的腳本,或者這只是在這篇文章中的一個錯字:'sh -x ./scrip「A」'? (你的意思是'sh -x ./script「A」'?) –
在兩種情況下都要加上'LC_ALL = C':'LC_ALL = C ./script「A」'和'sh -x ./scrip「A 「'擺脫'locale'問題。 – heemayl
另外,如果沒有shebang行,不知道在sh中調用腳本時shell運行在哪個shell中,sh'也不清楚,因爲它可能是'bash','dash'或其他任何依賴於在您的發行的味道。 – choroba