Я не могу понять, как ведет себя 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.