【发布时间】:2017-11-14 01:14:18
【问题描述】:
我试图理解为什么未设置的变量被评估为 0。 在我编写的某些脚本中,仅在需要时才设置变量,有时则不需要。 所以这种行为会导致输出不正确。 这是否意味着我必须预设所有变量或至少添加检查它们是否已设置?
#!/bin/bash
#myvalue=0 #comment to simulate an unset variable.
if [[ $myvalue -eq 0 ]] ; then
echo "OK"
fi
结果正常:
bash -x test.sh
+ [[ '' -eq 0 ]]
+ echo OK
OK
【问题讨论】:
-
试试
if [ $myvalue -eq 0 ];then -
当然你可以用
-eq和[;事实上,你是否应该使用[[ ... -eq ... ]]值得商榷,因为你可以改用可读性更强的(( ... == ... ))。 -
添加检查是否已设置很简单:
if [[ ${myvalue--1} -eq 0 ]] ; then(将默认值设置为 -1...选择您喜欢的任何默认值) -
这么多年过去了,我觉得这个问题最讽刺的是
[[是为了避免[的陷阱而引入的,但是(至少对我来说)[很好理解和[[令人困惑且容易出错! -
[在-eq使用非整数操作数时会给出一个很好的错误消息,而[[只是默默地忽略错误。
标签: bash if-statement evaluation unset is-empty