bash menjalankan sisi kanan pipeline dalam konteks subshell , jadi perubahan variabel (yang memang readdilakukan) tidak dipertahankan - mereka mati ketika subshell melakukannya, di akhir perintah.
Sebagai gantinya, Anda dapat menggunakan substitusi proses :
$ read a b dump < <(echo 1 2 3 4 5)
$ echo $b $a
2 1
Dalam hal ini, readberjalan di dalam shell utama kami, dan perintah penghasil output kami berjalan di subkulit. The <(...)sintaks menciptakan subkulit dan menghubungkan output ke pipa, yang kita mengarahkan ke input dari readdengan biasa <operasi . Karena readdijalankan di shell utama kita, variabel diatur dengan benar.
Seperti yang ditunjukkan dalam komentar, jika tujuan Anda adalah untuk membagi string menjadi variabel, Anda dapat menggunakan string di sini :
read a b dump <<<"1 2 3 4 5"
Saya berasumsi ada lebih dari itu, tetapi ini adalah pilihan yang lebih baik jika tidak ada.