bash bir alt çizgi bağlamında bir boru hattının sağ tarafını çalıştırır , bu nedenle değişkenlerdeki değişiklikler (yani ne readolduğu) korunmaz - komutun sonunda alt kabuk yaptığında ölürler.
Bunun yerine, işlem ikamesini kullanabilirsiniz :
$ read a b dump < <(echo 1 2 3 4 5)
$ echo $b $a
2 1
Bu durumda, readbirincil kabuğumuzda çalışır ve çıktı üreten komutumuz alt kabukta çalışır. <(...)Sözdizimi oluşturur bir altkabuk ve biz girişine yönlendirmek boru, onun çıkışını bağlayan readsıradan olan <operasyon . Çünkü readana kabuğunda değişkenler doğru ayarlanmış koştu.
Bir yorumda belirtildiği gibi, hedefiniz tam anlamıyla bir dizeyi bir şekilde değişkenlere bölmekse, burada dizeyi kullanabilirsiniz :
read a b dump <<<"1 2 3 4 5"
Sanırım bundan daha fazlası var, ama yoksa daha iyi bir seçenek.