Como atribuir uma variável por palavra de uma string

0

Como você sugeriria atribuir consecutivamente uma variável por palavra de string?

Estou procurando o comando curto: one-liner e sem loop, se possível. Deve ter da forma

echo "<sring>"  | your_command

Exemplo :

  • A string é "word1 word2 word3"
  • Quero atribuir a variável w1 a word1 , w2 a word2 e w3 a word3 .
por j1088099.mvrht.com. 10.02.2017 / 10:34

1 resposta

3

Isso funciona em ksh93 , mas não em bash , pois bash executa o read em um sub-shell:

echo "word1 word2 word3" | read w1 w2 w3
printf '"%s"\n' "$w1" "$w2" "$w3"

Isso significa que você simplesmente não pode ter uma atribuição como parte de um pipeline em bash .

A solução alternativa é usar as variáveis antes da sub-shell do pipeline sair:

echo "word1 word2 word3" | { read w1 w2 w3 && printf '"%s"\n' "$w1" "$w2" "$w3"; }

ou

echo "word1 word2 word3" | {
  read w1 w2 w3
  printf '"%s"\n' "$w1" "$w2" "$w3"
}

Isso funciona nos dois shells:

read w1 w2 w3 <<<"word1 word2 word3"
printf '"%s"\n' "$w1" "$w2" "$w3"
    
por 10.02.2017 / 10:48