0

我正在读一个像

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" ]] ;

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

4

2 回答 2

1

你为什么不这样检查呢?

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

测试

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

$ t="stat 100 NULL"
$ [[ "$t" == *"stat"*  ]] && echo yes
yes
于 2013-06-20T11:43:31.250 回答
1

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

引用不带下标的数组变量等价于引用下标为 0 的数组。

根据您发布的最后一行代码,尚不清楚您实际上要使用此代码完成什么。

于 2013-06-20T11:45:39.843 回答