Este é o comando: pdc status -a 2>&1 | grep 'okay'
Ele fornece a seguinte saída
[okay ]: you are currently listening: 33
[okay ]: you are currently listening: 22
[okay ]: you are currently listening: 11
Eu escrevi este comando no arquivo de script de shell. Mas eu quero armazenar a saída deste comando na matriz para algum processamento em cada um dos valores de índice na matriz.
Como posso armazenar a saída deste comando na matriz?
mapfile -t array < <(grep.....)
Primeiro de tudo, você não precisa necessariamente da matriz, para processar a linha de saída por linha, você pode:
Se você precisa da matriz, Glenn Jackman já lhe deu a melhor maneira de fazer isso, mas aqui está outra abordagem:
Explicação:
$IFS=$'\n'
:$IFS
é o separador de campos de entrada do bash , defini-lo apenas como o caractere de nova linha (\n
) garante que suas linhas de saída não sejam divididas em espaço em branco, para que você possa salvar cada linha como um elemento de matriz separado. Sem isso, cada palavra da saída do seu comando seria um elemento diferente.Dependendo do que você deseja fazer, pode ser uma boa idéia salvar o valor antigo
$IFS
e restaurá-lo após a leitura da matriz:$(command)
: Isso é chamado substituição de comando e permite salvar a saída de um comando em uma variável. Há duas maneiras de fazer isso:e
Dos dois, o
$()
é melhor porque:Ele pode lidar com comandos aninhados:
Por exemplo
var=$(cat $(find ~/))
Ele tem muito menos problemas com citações e resulta em uma sintaxe mais limpa. Veja aqui para mais.
fonte
Mais uma maneira mais intuitiva de usar o
readarray
builtin (consultehelp -m readarray
):Em seguida, para imprimir um elemento da matriz, digamos o segundo elemento, você pode usar:
Para imprimir todos os elementos da matriz em linhas separadas, você pode usar:
fonte