Bash if语句错误

时间:2015-04-15 22:45:09

标签: bash

我有以下Bash代码:

 while read -a line; do
    if [[ line[2] == $2 ]]; then
        version[n]=${line[1]}
        let n++
    fi
 done <"$file"

我知道文件中有一行是为了满足if语句。我不是在比较数字而是字符串所以它不是问题所在。我的if语句有什么问题?

1 个答案:

答案 0 :(得分:5)

您需要在那里使用${line[2]}

[[不会自动扩展像((这样的简单字词。

请参阅:

$ line=(a b c)
+ line=(a b c)
$ [[ line[1] = a ]]; echo $?
+ [[ line[1] = a ]]
+ echo 1
1
$ [[ ${line[1]} = a ]]; echo $?
+ [[ b = a ]]
+ echo 1
1
$ [[ ${line[0]} = a ]]; echo $?
+ [[ a = a ]]
+ echo 0
0
$ line=(0 1 2)
+ line=(0 1 2)
$ (( line[1] == 1 )); echo $?
+ ((  line[1] == 1  ))
+ echo 0
0
$ (( line[2] == 1 )); echo $?
+ ((  line[2] == 1  ))
+ echo 1
1

注意:

[[strong>确实在与整数运算一起使用时会进行单词扩展。然而考虑到这实际上是如何工作的,我根本不喜欢这种行为,并且不理解为什么它会像它那样工作。