使用 IFS 循环读取文件仅在不使用数组时才有效

Lui*_*s E 2 bash array

使用以下代码,我试图将文件读入数组:

GROUPS=()

while IFS=: read -r g1 g2 g3 g4
do
    GROUPS+=("$g3")
    echo "$g3"
done < /etc/group
Run Code Online (Sandbox Code Playgroud)

这不起作用,它甚至不输出任何内容,但是,如果我只留下回声,它会打印文件的内容。只要循环中某处存在添加到数组的指令,就不会打印任何内容。这似乎很奇怪,因为我可以毫无问题地对其他文件执行此操作。

知道是什么原因造成的吗?我用 bash -x 进行了检查,当存在有问题的指令时,它甚至没有进入循环。

另外,如果相关,我以 root 身份运行它。

jim*_*mij 6

您不幸选择了数组的名称,该名称已由其bash本身保留且为只读,因此您无法更改它。

团体

一个数组变量,包含当前用户所属的组列表。对 GROUPS 的分配无效并返回错误状态。如果 GROUPS 未设置,它会失去它的特殊属性,即使它随后被重置。

只需使用另一个名称,代码就可以工作。