我很难理解为什么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
选项导致退出?
答案 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