如果给出条件,Bash数组将忽略

时间:2013-06-20 11:33:22

标签: arrays bash file

我正在阅读像

这样的文件
state 100 NULL
operator 2 0 3 NULL

我希望将其解析为数组行以检查某些条件 所以我实际做的是:

#!/bin/bash
fileLines=$(cat file)
IFS=$'\n'
for line in $fileLines
do
    IFS=$' ' read -r -a lineArray <<< $line 
    echo ${lineArray[@]}
    if [[ ${lineArray["state"]} ]] ; 
    then
       echo "hit"
    fi
done

但不幸的是它带回了输出

state 100 NULL
hit
operator 2 0 3 NULL
hit

即使我使用

检查是否相等
if [[ ${lineArray[0]} == "state" ]] ;

它仍然忽略了我给脚本的条件。有没有更好的方法来检查我的阵列的条件?

2 个答案:

答案 0 :(得分:1)

你为什么不这样检查?

[[ "$line" == *"stat"*  ]] && echo yes

测试

$ t="operator 2 0 3 NULL"
$ [[ "$t" == *"stat"*  ]] && echo yes
$

$ t="stat 100 NULL"
$ [[ "$t" == *"stat"*  ]] && echo yes
yes

答案 1 :(得分:1)

数组由整数索引,看起来任何非整数字符串都被强制为零,因此${lineArray["state"]}将始终返回${lineArray[0]}man bash在这个问题上相当模糊:

  

引用          没有下标的数组变量等同于引用          数组,下标为0。

根据您发布的最后一行代码,我们不清楚您使用此代码实际尝试完成的内容。