Почему Bash с опцией -e завершается, когда выражение let выражается в 0?
Я изо всех сил пытаюсь понять, почему Баш -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 ответа
Увидеть help let
:
Статус выхода: если последний ARG оценивается как 0, пусть возвращает 1; пусть возвращает 0 в противном случае..
Поведение let
встроенный такой же, как для обычно используемых expr
команда:
Состояние выхода [...] 1, если EXPRESSION равно нулю или 0 [...]
Вместо этого вы можете использовать арифметическое расширение:
indice=$(( year - 1 ))
Этот оператор вернет 0, даже если назначенное выражение оценивается как 0.
Вы можете использовать следующий трюк:
let indice=year-1 || true