Tenho uma sequência de texto e espaços que se parece com isso:
macOS windows arch-linux ubuntu_linux
Quero anexar cada item (com espaços em branco indicando uma quebra entre eles) a um array bash. Como faço isso?
Tenho uma sequência de texto e espaços que se parece com isso:
macOS windows arch-linux ubuntu_linux
Quero anexar cada item (com espaços em branco indicando uma quebra entre eles) a um array bash. Como faço isso?
Se você
grep
suporta a opção não padrão-o
, combash
4.0 ou mais recente, você pode fazer:O que funcionaria para palavras delimitadas com qualquer caractere classificado como espaço em branco¹ no local.
¹ A divisão baseada em 'while
read
'$IFS
, dependendo da localidade e da versão do bash, só funcionaria de forma confiável para espaços ASCII, tabulações ou quebras de linha, ou apenas espaços em branco ASCII (adicionando CR, VT, FF) ou apenas espaços em branco de byte único... (e você precisaria listar todos os caracteres de espaço em branco que deseja dividir); etr
em sistemas GNU, pelo menos, só funciona para caracteres de byte único.Se o seu arquivo tiver apenas uma linha, você pode usar:
Se for possível ter várias linhas, uma maneira de fazer isso seria primeiro transformar o arquivo para que cada palavra tenha sua própria linha e então usar o readarray do bash (disponível somente no bash 4.0 ou posterior, o que pode ser um problema para você se estiver no macOS):
Inicializar uma matriz vazia:
Em seguida, para cada sequência de caracteres lida, anexe as palavras delimitadas por espaços em branco à matriz, usando o operador split+glob:
Um exemplo simples:
Saída: