Bantuan untuk skrip sederhana
#!/bin/bash
array1=(
prova1
prova2
slack64
)
a="slack64"
b="ab"
if [ $a = $b ]
then
echo "$a = $b : a is equal to b"
else
echo "$a = $b: a is not equal to b"
fi
Skrip ini tidak berfungsi, saya ingin skrip yang memeriksa apakah slack64 ada dalam daftar (saya menggunakan array), dan cukup beri saya, ya ada, atau tidak. Saya tidak tahu bagaimana membandingkan array dengan satu variabel.
array1
pekerjaannya?Jawaban:
Gunakan berbagai jenis array: daripada array yang diindeks integer, gunakan array asosiatif, jadi kuncinya (indeks) adalah apa yang akan Anda periksa.
bash-4.0
atau lambat diperlukan untuk ini.Di atas kita tidak terlalu peduli dengan nilai-nilai, mereka hanya perlu kosong untuk ini. Anda dapat "membalikkan" array yang diindeks ke dalam array asosiatif baru dengan menukar kunci dan nilai:
Ini dapat membuahkan hasil jika Anda memiliki array besar yang sering dicari, karena penerapan array asosiatif akan lebih baik daripada loop array-traversing. Itu tidak akan cocok dengan setiap kasus penggunaan, karena tidak dapat menangani duplikat (meskipun Anda dapat menggunakan nilai sebagai penghitung, bukan hanya 1 seperti di atas), dan tidak dapat menangani indeks kosong.
Hancurkan garis kompleks di atas, untuk menjelaskan "inversi":
sumber
Cara langsung adalah beralih dengan loop:
sumber
[[ a == aaa ]]
itu salah tapi kecocokan aaa tidak?[ ]
: kelas karakter (gumpalan)[[ ]]
untuk apa yang Anda katakan. Sudahkah Anda menguji?Dengan
zsh
:sumber
Fungsi ini berfungsi dengan array asosiatif.
Kita dapat menggunakan fungsi ini untuk melakukan salah satu dari yang berikut:
- periksa apakah array memiliki kunci tertentu -----------------> inArray "myKey" $ {! myArray [@]} "
- periksa apakah array mengandung nilai tertentu ---------> inArray "myValue" "$ {myArray [@]}"
sumber
Anda juga dapat menggunakan grep untuk itu:
sumber
$a
, dan jangan mulai dengan-
ketika Anda lupa--
). Anda bisa menggunakan%s\0
alih-alih%s\n
dan menggunakangrep --null
(dengan asumsi GNU grep atau kompatibel) sebagai variabel bash tidak bisa mengandung karakter NUL. Anda juga perlu menangani case dari array kosong secara khusus (karena perintah printf akan mencetak hal yang sama seperti untuk array dengan satu elemen kosong). Perhatikan juga bahwa Anda tidak perlu memulai subkulit di sini.