我正在阅读像
这样的文件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" ]] ;
它仍然忽略了我给脚本的条件。有没有更好的方法来检查我的阵列的条件?
答案 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。
根据您发布的最后一行代码,我们不清楚您使用此代码实际尝试完成的内容。