Esse é o erro que você teria se estivesse interpretando esse script com o shell Bourne, um shell muito antigo dos anos 70, pouco usado atualmente, exceto talvez no Solaris 10 ou mais.
Então, minha aposta seria que esse script está sendo interpretado por /bin/sh
no Solaris 10 ou anterior, não em ksh
. No Solaris, o padrão sh
está em /usr/xpg4/bin/sh
.
O shell Bourne não suportava a forma $(...)
de substituição de comando, você tinha que usar '...'
.
Em qualquer caso, nem a shell Bourne nem a especificação POSIX sh
suportam matrizes. Para atribuir uma variável de matriz ao conteúdo das linhas não vazias da saída de um comando com /bin/ksh
do Solaris 10 (que é baseado em ksh88), você precisaria:
set -o noglob
IFS='
'
set -A array -- $(cmd)
(note que os arrays do ksh88 não podem ter mais de 4096 elementos).
E então você exibe os elementos da matriz como:
((${#array[@]})) && printf '"%s"\n' "${array[@]}"
Se o seu script tiver #!/bin/ksh
she-bang, ele deverá ser invocado como /path/to/the/script
ou ksh /path/to/the/script
, não sh /path/to/the/script
.