【问题标题】:Why does Bash with -e option exit when 'let' expression evaluates to 0? [duplicate]为什么当'let'表达式计算为0时,带有-e选项的Bash会退出? [复制]
【发布时间】:2015-06-04 17:08:04
【问题描述】:

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

【问题讨论】:

标签: bash arithmetic-expressions


【解决方案1】:

help let

退出状态: 如果最后一个 ARG 的值为 0,则 let 返回 1;否则返回 0..

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

如果 EXPRESSION 为 null 或 0 [...],则退出状态为 [...] 1 [...]

您可以改用算术扩展:

indice=$(( year - 1 ))

即使分配的表达式计算结果为 0,此语句也会返回 0。

【讨论】:

  • 绝对比使用let更好
  • 我要补充一点,indice=`expr $year - 1` 的行为与 let 相同。
  • @PBrockmann:谢谢,expr 提到的行为。
【解决方案2】:

您可以使用以下技巧:

let indice=year-1 || true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多