考虑以下三个 Bash 脚本:
- 没有语法错误的脚本 - 执行时不会出错,按预期循环输出 "this is the end: -1":
#!/bin/bash
while true ; do
x=1 # or, read the variable from some external source
y=2 # or, read the variable from some external source
z=$(( $x - $y ))
echo "this is the result: $z"
sleep 1
done
执行-无限循环,直到我们中断为止:
$ bash test.sh
this is the result: -1
this is the result: -1
this is the result: -1
^C
- 导致语法错误的脚本(注意缺失的x和y变量,这些变量随后需要用于计算):
#!/bin/bash
while true ; do
x= # or, read the variable from some external source
y= # or, read the variable from some external source
z=$(( $x - $y ))
echo "this is the result: $z"
sleep 1
done
执行 - 当出现语法错误时,bash会中断脚本的执行:
$ bash test.sh
test.sh: line 6: - : syntax error: operand expected (error token is "- ")
没有while循环的脚本 - 脚本执行不会被中断:
#!/bin/bash
x=
y=
z=$(( $x - $y ))
echo "this is the result: $z"
执行 - bash注意到计算中的语法错误,但不会中断脚本的执行:
$ bash test.sh
test.sh: line 5: - : syntax error: operand expected (error token is "- ")
this is the result:
为什么bash在语法错误时在while循环中和不在while循环中会有不同的行为? 编辑:我知道输入变量可以/应该进行验证,并且有各种方法可以做到这一点。我更感兴趣的是为什么它在是否在while循环中表现不同。
echo x
,你会发现脚本没有被中断。 - oguz ismaildeclare -i x y
。 - Léa Gris