IFS ループを使用してファイルを読み込むことは、配列を使用しない場合にのみ機能します。

IFS ループを使用してファイルを読み込むことは、配列を使用しない場合にのみ機能します。

次のコードを使用してファイルを配列に読み込もうとしています。

GROUPS=()

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

これは動作せず、何も出力しません。ただし、エコーをそのままにするとファイルの内容が印刷されます。配列に追加するコマンドがループのどこかで発生する限り、何も印刷されません。他のファイルでも問題なくこれを行うことができるので、これは奇妙に見えます。

原因は何か知っていますか? bash -xで確認しましたが、問題になるコマンドがあるとループに入ることもありません。

また、関連性がある場合はrootとして実行します。

ベストアンサー1

bash残念ながら、すでに独自に予約されている配列の名前を選択しました。読み取り専用なので変更できません。

グループ

現在のユーザーが属するグループのリストを含む配列変数。 GROUPS の割り当てが正しくなく、エラー状態が返されます。 GROUPS が設定されていない場合は、後でリセットしても特殊属性が失われます。

別の名前を使用すると、コードが機能します。

おすすめ記事