Экономия $! (идентификатор процесса последней фоновой команды) как элемент массива

Я не могу понять, как ведет себя 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=( '$!' ) кажется неправильным... Это особенность? Регресс?

В Linux я получаю b=( 20769 ) с zsh 5.0.2 и b=( '$!' ) с zsh 5.5.1.

Fravadona 14.08.2024 17:12
b[1] = "$!" тоже работает, как и ожидалось. Это просто случай. Странный.
Shawn 14.08.2024 23:25

Я бы сообщил об этом как об ошибке

Shawn 14.08.2024 23:30

с b[1] = "$!" я получаю unmatched ", используя zsh 5.9. Мне нужно добавить обратную косую черту, чтобы кавычки работали: b[1] = "$\!"... ты прав, это похоже на ошибку.

Fravadona 15.08.2024 00:39

Я сообщил об ошибке по адресу [email protected].

Fravadona 15.08.2024 01:07

Я тестировал версию 5.9; не получил непревзойденную ошибку.... Могу поспорить, что это как-то связано с расширением истории, поскольку ! для этого используется.

Shawn 15.08.2024 07:33

Я могу воспроизвести это с помощью zsh 5.8.1 на MacOS.

user1934428 15.08.2024 08:07
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
3
7
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема исправлена ​​в коммите 5977d3c


Но ИМХО, лучше не полагаться на arr[1]=$! и использовать один из следующих обходных путей для переносимости между версиями zsh:

arr[1]=${!}

# or

arr[1]=($!)

Другие вопросы по теме

Похожие вопросы

Есть ли эффективный способ извлечь фрагмент трехмерного массива?
Создайте новую матрицу с суммой всех подматриц n*n без использования циклов
Как создать случайную сложную симметричную унитарную матрицу в Python?
Могу ли я заменить имя массива на переменную и добавить к ней значение?
Есть ли в массивах NumPy синтаксис для установки значения в последнем измерении на основе первого измерения?
Как создать массив из определенных частей данных JSON?
Уменьшите двухмерный массив истории изменений до начальных и конечных значений для каждого идентификатора и удалите строки, в которых нет изменений
C++ Существует ли быстрый многомерный массив, который позволяет использовать подмассивы разного размера?
PowerShell — наиболее эффективный способ создания массива/списка массивов/pscustomobject
Сжатие массива элементов при уменьшении размера каждого элемента с 8 бит до 3 бит