shell脚本上未定义变量的值是多少?

时间:2015-04-09 06:37:14

标签: bash shell variables

我正在从一个文件创建一个数组,但我注意到如果我没有初始化一个变量并使用它,那么它也可以正常工作。就像我的代码是:

while read line
   do 
    array[i]="$line"
    i=$i+1
   done < file

这里我想知道'i'的值是如何用零初始化的,即使我没有初始化它的值。

2 个答案:

答案 0 :(得分:1)

首先让我告诉你,这不符合你的期望。 bash中的未初始化变量将根据上下文进行评估。到0预期数字;到期望字符串的an empty string。在这种情况下......

i=$i+1

实际上是一个字符串连接。整个事情无论如何都有用,因为+1+1+1不同等等。你的意思可能就是这样:

: $((++i))

或者这个:

i=$((i + 1))

但无论如何,使用未初始化的变量只是一种不好的做法。它在单行中很有用,写i=0i=""是不必要的负担,但在脚本中我会在开头使用set -u来捕获所有实例。

一些有用的来源:http://mywiki.wooledge.org/ArithmeticExpression

答案 1 :(得分:1)

i尚未初始化为零,但its reference value evaluates to zero

  

如果变量为空(null)或未设置,则其引用的计算结果为0.

在下一行i=$i+1中,变量被替换为其值(空),导致i=+1,结果等于1.

所以它主要是偶然的,但在这种情况下会导致预期的结果。

将来,我建议使用set -u以避免意外使用未初始化的变量。