Arrays 在bash中获取数组大小的问题
我有以下代码来获取所有由grep使用的表达式过滤的行: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
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]