我有以下Bash代码:
while read -a line; do
if [[ line[2] == $2 ]]; then
version[n]=${line[1]}
let n++
fi
done <"$file"
我知道文件中有一行是为了满足if语句。我不是在比较数字而是字符串所以它不是问题所在。我的if语句有什么问题?
答案 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>确实在与整数运算一起使用时会进行单词扩展。然而考虑到这实际上是如何工作的,我根本不喜欢这种行为,并且不理解为什么它会像它那样工作。