Ini adalah opsi lain
$ read test < <(echo hello world)
$ echo $test
hello world
jika Anda ingin membaca banyak data dan mengerjakan setiap baris secara terpisah, Anda dapat menggunakan sesuatu seperti ini:
cat myFile | while read x ; do echo $x ; done
jika Anda ingin membagi baris menjadi beberapa kata, Anda dapat menggunakan beberapa variabel sebagai pengganti x seperti ini:
cat myFile | while read x y ; do echo $y $x ; done
sebagai alternatif:
while read x y ; do echo $y $x ; done < myFile
Namun begitu Anda mulai ingin melakukan sesuatu yang sangat pintar dengan hal semacam ini, lebih baik Anda menggunakan beberapa bahasa scripting seperti perl di mana Anda dapat mencoba sesuatu seperti ini:
perl -ane 'print "$F[0]\n"' < myFile
Ada kurva belajar yang cukup curam dengan perl (atau saya kira salah satu dari bahasa ini) tetapi Anda akan merasa jauh lebih mudah dalam jangka panjang jika Anda ingin melakukan apa pun selain skrip yang paling sederhana. Saya akan merekomendasikan Perl Cookbook dan, tentu saja, The Perl Programming Language oleh Larry Wall et al.
Gunakan
IFS= read var << EOF
$(foo)
EOF
Anda bisa trik read
untuk menerima dari pipa seperti ini:
echo "hello world" | { read test; echo test=$test; }
atau bahkan tulis fungsi seperti ini:
read_from_pipe() { read "[email protected]" <&0; }
Tapi tidak ada gunanya - tugas variabel Anda mungkin tidak bertahan lama! Sebuah pipa mungkin menelurkan subkulit, di mana lingkungan diwariskan berdasarkan nilai, bukan referensi. Inilah mengapa read
tidak peduli dengan input dari pipa - tidak terdefinisi.
FYI, http://www.etalabs.net/sh_tricks.html adalah koleksi bagus dari cruft yang diperlukan untuk melawan keanehan dan ketidakcocokan cangkang bourne, sh.