Eu fiz o seguinte:
mapfile -t array < <(commands)
onde commands
produzirá saída separada por nova linha.
Então, com base no resultado, se não houver nada no array, saia, caso contrário continue:
[[ "${#array[@]}" -eq 0 ]] && exit
...
O problema é que a condição nunca é atendida. Porque quando o dito commands
não retorna nada, ${#array[@]}
retorna 1 em vez de 0.
Mas conta corretamente se eu atribuir o array da seguinte maneira:
array=($(commands))
Meus testes:
$ declare -a array
$ array=($(echo))
$ echo ${#array[@]}
0
$ unset array
$ mapfile -t array < <(echo)
$ echo ${#array[@]}
1
Por que?
Inicialmente usei o array=($(commands))
formato, mas shellcheck
sugeri que mapfile
o usasse.
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)