Saya menemukan ini.
Dan saya mencoba ini:
x='some
thing'
y=(${x//\n/})
Dan aku tidak memiliki keberuntungan, saya pikir itu bisa bekerja dengan double backslash:
y=(${x//\\n/})
Tapi itu tidak.
Untuk tes saya tidak mendapatkan apa yang saya inginkan saya lakukan:
echo ${y[1]}
Mendapatkan:
some
thing
Yang saya ingin menjadi:
some
Aku ingin y
untuk menjadi sebuah array [beberapa, hal]
. Bagaimana saya bisa melakukan ini?
Cara lain:
x=$'Some\nstring'
readarray -t y <<<"$x"
Atau, jika anda don't memiliki bash 4, bash 3.2 setara:
IFS=$'\n' read -rd '' -a y <<<"$x"
Anda juga dapat melakukannya dengan cara anda awalnya mencoba untuk menggunakan:
y=(${x//$'\n'/ })
Ini, bagaimanapun, tidak akan berfungsi dengan benar jika anda string yang sudah berisi ruang-ruang, seperti 'line 1\nline 2'
. Untuk membuat ini bekerja, anda perlu untuk membatasi kata separator sebelum parsing ini:
IFS=$'\n' y=(${x//$'\n'/ })
...dan kemudian, karena anda mengubah pemisah, anda don't perlu mengkonversi \n
untuk space
lagi, sehingga anda dapat menyederhanakan ke:
IFS=$'\n' y=($x)
Pendekatan ini akan berfungsi unless $x
berisi pencocokan pola globbing (seperti "*
") - dalam hal ini akan diganti dengan yang sesuai nama file(s). Membaca
/readarray
memerlukan metode yang lebih baru bash versi, tapi bekerja di semua kasus.