Saya hanya mencari cara yang tepat dan lebih elegan untuk menulis kode berikut di Bash:
in_array() {
local somearray=${1}[@]
local somevalue=${2}
for i in ${!somearray}; do
if [[ ${i} == ${somevalue} ]]; then
return 0
fi
done
return 1
}
#declare array
declare -a myArray=(foo bar baz qux)
#defined values
val1=foo
val2=baz
#Ugly check if multiple strings are part of the array at the same time
if in_array myArray $val1 && in_array myArray $val2; then
# Do something #
else
# Do something else#
fi
Ide dasarnya adalah bahwa saya perlu memeriksa apakah 2 ore lebih banyak nilai statis, pada saat yang sama, merupakan bagian dari array. Bertanya-tanya apakah ada cara yang lebih baik untuk melakukan ini, karena jika saya perlu memeriksa lebih dari 3-4 nilai ... if in_array
garis itu akan menjadi besar.
Ada saran, tolong?
Terima kasih!
"$(foo, bar, baz, qux)"
seharusnya mungkin(foo bar baz qux)
,$val22
seharusnya$val2
.-->
periksa jawaban dari tautan-tautan itu ... misalnya ketika mereka menyarankan=~
(untuk kejelekan - itu lebih mudah dibaca) atau ketika mereka mengusulkan untuk menyanjung array dan mencari substring*"two"*
(Anda dapat mencoba*$var1*
&&*$var1*
) ... BTW Saya pikir Anda bisa setuju lebih baik benar-benar relatif ...:-)
lebih baik untuk membaca, lebih baik karena lebih efisien (Anda perlu menggunakan fungsi yang berbeda sebagai jawaban Anda ... untuk memecahkan pertama kali Anda tidak menemukan ...) ...?Jawaban:
Yah, operasi array di bash selalu jelek, seperti yang ditunjukkan oleh cara Anda sendiri untuk meneruskan array ke fungsi.
Saya akan mengonversi tes Anda menjadi for for di atas argumen yang tersisa setelah menetapkan array:
sehingga Anda dapat memeriksa keberadaan semua nilai dalam satu panggilan fungsi:
sumber