O seu problema é usar sh -c "..." , consulte @s respostas de Gilles para obter mais detalhes.
Mais ainda, sh (consulte POSIX sh ) não suporta array ( estritamente falando, ele tem apenas um array, $ @ ), você precisa ligar para outros shells no seu sistema, que suportam array como bash , zsh ou ksh .
bash -c 'arr=(1 2 3 4 5);for var in "${arr[@]}";do echo "$var"; done'
Observe também que você cometeu um erro ao deixar ${arr[@]} un-quote, na verdade você precisa de for var in "${arr[@]}" . Invocação de variável sem aspas chamando split + glob e é fonte de muitas implicações de segurança .
Para jogar com POSIX sh, você pode usar $ @ :
set -- 1 2 3 4 5
for var do
printf '%s\n' "$var"
done