Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在bash中获取数组大小的问题_Arrays_Bash_Grep_Do While - Fatal编程技术网

Arrays 在bash中获取数组大小的问题

Arrays 在bash中获取数组大小的问题,arrays,bash,grep,do-while,Arrays,Bash,Grep,Do While,我有以下代码来获取所有由grep使用的表达式过滤的行: arrvar=( $(grep -Poh '^[A-Z_]+=.+' input.txt) ) arrlen=${#arrvar[@]} i=0 while : ; do split=(${arrvar[i]//=/ }) name="${split[0]}" value="${split[1]}" echo "index..: $i" echo "name...: $name" ec

我有以下代码来获取所有由grep使用的表达式过滤的行:

arrvar=( $(grep -Poh '^[A-Z_]+=.+' input.txt) )
arrlen=${#arrvar[@]}

i=0
while : ; do

    split=(${arrvar[i]//=/ })

    name="${split[0]}"
    value="${split[1]}"

    echo "index..: $i"
    echo "name...: $name"
    echo "value..: $value"

    i=$(( i + 1 ))
    if [ $i > $arrlen ]; then
      break
    fi
done
在input.txt中显示此内容:

HELLO=111
STACK=222
OVERFLOW=333
结果如下:

index..: 0
name...: STACK
value..: 222

为什么只返回数组的第一项而不是文件的三项

您正在进行如下测试:

if [ $i > $arrlen ]
但你可能是说

if (( i > arrlen ))

[
按字母顺序进行比较,
比较数字。

+1:虽然他可能需要
=
来防止额外的数据行中没有任何内容。或者
[$i-gt$arrlen]