为什么Bash with -e选项在' let'表达式评估为0?

时间:2015-03-31 11:12:18

标签: bash arithmetic-expressions

我很难理解为什么bash -e选项会退出此脚本。 仅当计算的表达式给出0

时才会发生这种情况
#!/bin/bash
set -ex
table_year=( 1979 1982 1980 1993 1995 )
year=$1 
let indice=year-1
real_year=${table_year[$indice]}
echo OK $real_year

在以下情况时可以:

./bash_test_array 2

但不是在以下时间:

./bash_test_array 1 

indice这种情况等于0。为什么-e选项导致退出?

2 个答案:

答案 0 :(得分:5)

请参阅help let

  

退出状态:   如果最后一个ARG的计算结果为0,则返回1;让我们返回0 ..

let内置的行为与常用的expr命令相同:

  

如果EXPRESSION为空或0 [...]

,退出状态为[...] 1

您可以改为使用算术扩展:

indice=$(( year - 1 ))

即使指定的表达式的计算结果为0,此语句也将返回0.

答案 1 :(得分:1)

您可以使用以下技巧:

let indice=year-1 || true