2

我正在尝试通过以下 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。而且我必须将排版与异常处理一起使用。

4

1 回答 1

1

尝试使用评估:

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节中指定的那样:

如果有命令名称,则应按照命令搜索和执行中的说明继续执行。如果没有命令名称,但该命令包含命令替换,则该命令应以最后执行的命令替换的退出状态完成。否则,命令将以零退出状态完成。

于 2013-07-20T13:08:56.777 回答