Para tratar uma vírgula como um separador de palavras, tente:
IFS="$IFS," read a b c d
Isso adiciona temporariamente uma vírgula a IFS
, que é a lista de caracteres que o shell usa para separadores de campo.
Como exemplo, vamos reunir alguma entrada:
$ IFS="$IFS," read a b c d
1, 2,3 , 4
Vamos ver como o bash interpretou essa entrada:
$ echo "a=$a b=$b c=$c d=$d"
a=1 b=2 c=3 d=4
Melhoria
Podemos combinar o prompt e o comando de leitura:
IFS="$IFS," read -p "Enter network info: " a b c d
Documentação
De man bash
:
IFS
The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is<space><tab><newline>
Alternativa
Se, por alguma razão não especificada, alguém realmente quisesse usar sed
para essa tarefa:
read -p "Enter network info: " a b c d < <(sed 's/,/ /g; q')
O comando s/,/ /g
informa ao sed para substituir cada vírgula por um espaço. q
diz para sair depois da primeira linha.
O lone <
indica redirecionamento : ele diz ao shell para obter sua entrada para o comando read
do objeto tipo arquivo que segue na linha de comando.
A construção <(...)
é chamada de substituição de processo e cria um objeto semelhante a um arquivo a partir do comando contido nos parênteses. Esse comando é o comando sed
que substitui vírgulas por espaços.
Para a mesma abordagem, mas usando o awk:
read -p "Enter network info: " a b c d < <(awk '{gsub(/,/, " "); print; exit}')