arraysmacoszshpid

Saving $! (process ID of last background command) as an array element


I can't understand the way zsh 5.9 behaves when assigning $! to an array:

unset a b c

sleep 3 &

a=$!
b[1]=$!
c[1]=${!}

typeset -p a b c

output:

typeset a=21391
typeset -a b=( '$!' )
typeset -a c=( 21391 )

Getting b=( '$!' ) doesn't feel right... Is it a feature? A regression?


Solution

  • The problem's been fixed in commit 5977d3c


    But IMHO it's better to not rely on arr[1]=$! and to use the following workaround to be portable across zsh versions:

    arr[1]=${!}