read -a array
lê todas as palavras de um registro em array
.
Se você quiser ler todas as palavras de toda a entrada, use um separador de registro que não ocorra na entrada, como com -d ''
que usa o caractere NUL como o separador de registro ou -d :
(como :
não pode ocorrer em um nome de usuário).
IFS=$'\n' read -rd '' -a array < <(ls -Ll /dev | awk '/tty/{print $3}')
(aqui usando -L
para que, para os links simbólicos, a propriedade dos dispositivos, ao contrário do symlink, seja retornada).
Ou use readarray
para cada linha da entrada a ser armazenada na matriz.
readarray -t array < <(ls -Ll /dev | awk '/tty/{print $3}')
Ou você pode usar o operador split + glob:
set -o noglob # disable glob part
IFS=$'\n' # split on newline
array=($(ls -Ll /dev | awk '/tty/{print $3}')) # invoke split+glob by leaving
# the $(...) unquoted.
Observe que tty
é procurado em toda a saída de ls -Ll
, incluindo o nome do usuário e do grupo, o nome do arquivo (e o destino do symlink se você omitir o -L
). Se você quiser considerar apenas o nome do arquivo, você poderia fazer
ls -Lld /dev/*tty* | awk '{print $3}'
em vez disso.
Com zsh
, você poderia fazer:
zmodload zsh/stat
stat -s -A array +uid /dev/*tty*
(que teria o benefício de também trabalhar para nomes de usuários contendo espaços em branco).