"CASE"部分が入力されたバイト/文字が下位、上位、数字または特殊文字であるかどうかを識別するスクリプトを記述しました。プログラムは正常に動作しますが、奇妙なことがあります。私はアルファベット「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 ./script "A" 'と' sh -x ./scrip "Aの両方に' LC_ALL = C'を付加します。 "' 'ロケール 'の問題を取り除く。 – heemayl
また、シバンラインがなければ、 'sh'なしで呼び出されたときにスクリプトがどのシェルで実行されているのか不明です。' bash'、 'dash'などに依存するので、' sh'とは不明です。あなたの流通の味について。 – choroba