Estou essencialmente tentando atribuir certas porções da saída de um comando shell para várias variáveis, mas não sei como fazer isso.
Por uma questão de simplicidade, suponha que o comando no shell, quando executado, imprima
one two three four
que pode ser simulado com um
echo "one two three four"
(embora o comannd real seja diferente)
Agora, eu gostaria de atribuir a segunda e a quarta palavra da saída (neste caso, dois e quatro ) às variáveis w1 e w2 .
Eu pensei que poderia usar o comando ler assim:
echo "one two three four" | awk '{print $2 " " $4}' | read w1 w2
mas isso não funciona, provavelmente porque o comando read é executado em um subprocesso.
Então, como eu alcançaria o que estou procurando?
Respostas:
Isso não funciona porque
read
é executado em um processo filho que não pode afetar o ambiente dos pais.Você tem poucas opções:
Você pode converter seu comando para:
Como alternativa, altere o IFS e use
set
:ou uma string Here:
fonte
<<< Here String
read -r
:do not allow backslashes to escape any characters