Configuration Information:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -g -O2 -Wno-parentheses -Wno-format-security
uname output: Linux medium 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 
(2021-03-19) x86_64 GNU/Linux
Machine Type: x86_64-pc-linux-gnu

Bash Version: 5.1
Patch Level: 8
Release Status: release

Description:
        parameter expansion don't work correctly with array when index become
        bigger than 31 bit value

Repeat-By:
        for ((i=(1<<31)-3;i<(1<<31)+4;i++)){ a[i]='foo bar';}
        declare -p a
        declare -a a=([2147483645]="foo bar" [2147483646 .. 3651]="foo bar")

        for i in ${!a[@]};do echo $i ${a[i]% *};done
        2147483645 foo
        2147483646 foo
        2147483647 foo
        2147483648
        2147483649
        2147483650
        2147483651

Fix:
Not a fix, but:
        paste -d\  <(printf %s\\n ${!a[@]}) <(printf %s\\n "${a[@]% *}")
        2147483645 foo
        2147483646 foo
        2147483647 foo
        2147483648 foo
        2147483649 foo
        2147483650 foo
        2147483651 foo


Reply via email to