Ваша проблема заключается в использовании sh -c "..."
, подробнее см. @ Ответ Жиля .
Более того, sh
(см. POSIX sh ) не поддерживает массив (строго говоря, он имеет только один массив, $ @ ), вы необходимо вызвать другие оболочки в вашей системе, которые поддерживают такие массивы, как bash
, zsh
или ksh
.
bash -c 'arr=(1 2 3 4 5);for var in "${arr[@]}";do echo "$var"; done'
Также обратите внимание, что вы ошиблись при выходе из $ {arr [@]}
без кавычек, на самом деле вам нужно для переменной в "$ {arr [@]}"
вместо. Вызов переменной без кавычек вызывает split + glob и является источником многих последствий для безопасности .
Чтобы поиграть с POSIX sh, вы можете использовать $ @ :
set -- 1 2 3 4 5
for var do
printf '%s\n' "$var"
done