Bagaimana cara mencetak elemen array dari array Bash pada baris terpisah? Yang ini berhasil, tapi pasti ada cara yang lebih baik:
$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three
Sudah mencoba yang ini tetapi tidak berhasil:
$ IFS=$'\n' echo ${my_array[*]}
one two three
| grep -v '^$'
?Kutip saja argumen untuk menggema:
( IFS=$'\n'; echo "${my_array[*]}" )
sub shell membantu memulihkan IFS setelah digunakan
sumber
IFS=$'\n' echo "${my_array[*]}"
tidak berhasil. Baiklah!echo
ada bawaan di Bash. Namun, Anda dapat membungkusnya dalam sebuah fungsi dan itu akan berhasil! gist.github.com/steshaw/53ba0095bce8ccab52d26a14375dedb8Menggunakan untuk :
for each in "${alpha[@]}" do echo "$each" done
Menggunakan sejarah ; perhatikan ini akan gagal jika nilai Anda berisi
!
:history -p "${alpha[@]}"
Menggunakan nama dasar ; perhatikan ini akan gagal jika nilai Anda berisi
/
:basename -a "${alpha[@]}"
Menggunakan shuf ; perhatikan bahwa hasil mungkin tidak keluar secara berurutan:
shuf -e "${alpha[@]}"
sumber
Saya mencoba jawaban di sini dengan sangat besar untuk ... if loop, tetapi tidak mendapatkan kegembiraan - jadi saya melakukannya seperti ini, mungkin berantakan tetapi berhasil:
# EXP_LIST2 is iterated # imagine a for loop EXP_LIST="List item" EXP_LIST2="$EXP_LIST2 \n $EXP_LIST" done echo -e $EXP_LIST2
meskipun itu menambahkan ruang ke daftar, yang bagus - saya ingin itu sedikit menjorok ke dalam. Juga anggap "\ n" bisa dicetak dalam $ EP_LIST asli.
sumber
Varian berguna lainnya adalah pipa ke
tr
:echo "${my_array[@]}" | tr ' ' '\n'
Ini terlihat sederhana dan kompak
sumber
my_array=( "one two" three )
4
+, harus menggunakanecho "${my_array[@]}" | tr '' ' \n'
, meskipun secara pribadi saya akan menghindari penggunaanecho
seperti itu, di manatr
pilihan saya, saya pikir sesuatu sepertitr '' ' \n' <<<"${my_array[@]}"
mungkin sedikit lebih mudah dibaca nanti.