Я не могу понять, как ведет себя zsh 5.9 при присвоении $! массиву:
unset a b c
sleep 3 &
a=$!
b[1]=$!
c[1]=${!}
typeset -p a b c
выход:
typeset a=21391
typeset -a b=( '$!' )
typeset -a c=( 21391 )
Получать b=( '$!' ) кажется неправильным... Это особенность? Регресс?
b[1] = "$!" тоже работает, как и ожидалось. Это просто случай. Странный.
Я бы сообщил об этом как об ошибке
с b[1] = "$!" я получаю unmatched ", используя zsh 5.9. Мне нужно добавить обратную косую черту, чтобы кавычки работали: b[1] = "$\!"... ты прав, это похоже на ошибку.
Я сообщил об ошибке по адресу [email protected].
Я тестировал версию 5.9; не получил непревзойденную ошибку.... Могу поспорить, что это как-то связано с расширением истории, поскольку ! для этого используется.
Я могу воспроизвести это с помощью zsh 5.8.1 на MacOS.



Проблема исправлена в коммите 5977d3c
Но ИМХО, лучше не полагаться на arr[1]=$! и использовать один из следующих обходных путей для переносимости между версиями zsh:
arr[1]=${!}
# or
arr[1]=($!)
В Linux я получаю
b=( 20769 )с zsh 5.0.2 иb=( '$!' )с zsh 5.5.1.