bash
ejecuta el lado derecho de una tubería en un contexto de subshell , por lo que los cambios en las variables (que es lo que read
hace) no se conservan; mueren cuando la subshell lo hace, al final del comando.
En su lugar, puede usar la sustitución de procesos :
$ read a b dump < <(echo 1 2 3 4 5)
$ echo $b $a
2 1
En este caso, read
se ejecuta dentro de nuestro shell primario, y nuestro comando de producción de salida se ejecuta en el subshell. La <(...)
sintaxis crea una subshell y conecta su salida a una tubería, que redirigimos a la entrada de read
con la <
operación ordinaria . Debido a que se read
ejecutó en nuestro shell principal, las variables están establecidas correctamente.
Como se señaló en un comentario, si su objetivo es literalmente dividir una cadena en variables de alguna manera, puede usar una cadena aquí :
read a b dump <<<"1 2 3 4 5"
Supongo que hay más que eso, pero esta es una mejor opción si no la hay.