我试图通过下面的shell脚本test.sh来捕获排版错误:
typeset -i int
int=2
echo $int
int=asd || echo "type mismatch"
但我得到的输出为:
./test.sh
2
./test.sh[4]: asd: bad number
./test.sh
2
./test.sh[4]: asd: bad number
**type mismatch**
我正在使用以下机器:
bash --version
GNU bash, version 3.2.51(1)-release (sparc-sun-solaris2.10)
Copyright (C) 2007 Free Software Foundation, Inc.
请建议我在脚本中进行更改。 我需要一种方法来确保输入参数是INT。我必须使用排版和异常处理。
答案 0 :(得分:1)
尝试使用eval:
typeset -i int # Using the name "int" just seems like asking for trouble!
eval int="$1" || echo "type mismatch" >&2
问题在于,在行int=asd || ...
中,第一个简单命令将始终按照标准的要求求值为true
,因为没有给出命令。变量赋值发生在当前shell中,但没有给出命令,结果如 2.9.1 部分所述:
如果有命令名,则执行将继续执行命令搜索和执行中所述。如果没有命令名,但命令包含命令替换,则命令应以完成的最后一个命令替换的退出状态完成。否则,命令应以零退出状态完成。