Jika saya memiliki string "1 2 3 2 1" - atau sebuah array [1,2,3,2,1] - bagaimana saya bisa memilih nilai unik, yaitu
"1 2 3 2 1" produces "1 2 3"
atau
[1,2,3,2,1] produces [1,2,3]
Mirip dengan uniq tetapi uniq tampaknya bekerja pada seluruh baris, bukan pola dalam satu baris ...
bash
array, menambahkan caraJika Anda menggunakan zsh:
atau (jika
KSH_ARRAYS
opsi tidak disetel) genapsumber
"${(u)array[@]}"
atau"${(@u)array}"
sebagai gantinya (perhatikan tanda kutip).${(u)array}
berfungsi bahkan jika arraynya kosong atau berisi string kosong, tanpa tanda kutip.Untuk array dengan nilai arbitrer, cukup rumit
bash
karena tidak memiliki operator bawaan untuk itu.bash
namun terjadi tidak mendukung penyimpanan karakter NUL dalam variabelnya, sehingga Anda dapat menggunakannya untuk meneruskannya ke perintah lain:Setara
zsh
dengan:pada sistem GNU baru-baru ini, dapat:
Atau, dengan versi terbaru dari
bash
, dan dengan asumsi tidak ada elemen array yang kosong, Anda bisa menggunakan array asosiatif:Dengan bash 4.4 dan yang lebih baru dan dengan GNU
sort
:Urutan elemen tidak akan sama dalam solusi yang berbeda tersebut.
Dengan
tcsh
:Akan mempertahankan f elemen irst (
a b a
=>a b
) sepertizsh
's(u)
bendera ekspansi.Akan mempertahankan yang terakhir (
a b a
=>b a
). Namun itu menghapus elemen kosong dari array.sumber
Solusi ini berhasil untuk saya.
Di atas menghasilkan 1 2 3 sebagai output.
Versi yang lebih pendek seperti yang disarankan Costas adalah,
Untuk menyimpan hasil akhir ke array, Anda bisa melakukan sesuatu seperti,
Sekarang, ketika saya melakukan gema
arr
, ini adalah output yang saya dapatkan.Referensi
https://stackoverflow.com/a/13648438/1742825 https://stackoverflow.com/a/9449633/1742825
sumber
tr '\n' ' '
Untuk melakukannya sepenuhnya di shell dan meletakkan hasilnya dalam array,
Dengan kata lain: jika kita belum melihat kata yang diberikan, tambahkan ke
result
array dan beri tanda sebagai telah dilihat. Begitu sebuah kata telah terlihat, abaikan penampilan berikutnya dari itu.sumber
unset seen
sebelumdeclare -A seen
dalam kasus$seen
sebelumnya didefinisikan (bahkan sebagai variabel skalar dari lingkungan).