bash
menjalankan sisi kanan pipeline dalam konteks subshell , jadi perubahan variabel (yang memang read
dilakukan) 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, read
berjalan 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 read
dengan biasa <
operasi . Karena read
dijalankan 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.