Como atribuir valores a múltiplas variáveis na linha de comando com barras

8

Estou essencialmente tentando avaliar certas partes da saída de um comando shell para várias variáveis, mas não sei como fazer isso.

Para simplificar, assuma que o comando no shell, quando executado, imprime

one two three four

que pode ser simulado com um

echo "one two three four"

(embora o comannd real seja diferente)

Agora, gostaria de atribuir a segunda e quarta palavra da saída (neste caso dois e quatro ) às variáveis w1 e w2 .

Eu achei que poderia usar o comando read da seguinte forma:

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 iria conseguir o que eu sou depois?

    
por René Nyffenegger 11.04.2011 / 10:31

1 resposta

14

Isso não funciona porque o read é executado em um processo filho que não pode afetar o ambiente do pai.

Você tem algumas opções:

Você pode converter seu comando para:

w1=$(echo "one two three four" | awk '{print $2}')
w2=$(echo "one two three four" | awk '{print $4}')

Como alternativa, altere o IFS e use set :

OIFS="$IFS"
IFS=' '
set -- $(echo "one two three four" | awk '{print $2" "$4}')
IFS="$OIFS"
w1=$1 w2=$2

ou uma string aqui:

read w1 w2 w3 w4 <<< "one two three four"
    
por 11.04.2011 / 11:05

Tags