Saya mencari konstruk bash
, untuk memutuskan apakah variabel $WORD
adalah salah satu kata yang didefinisikan. Saya butuh sesuatu seperti ini:
if "$WORD" in dog cat horse ; then
echo yes
else
echo no
fi
apakah bash memiliki konstruksi seperti itu? Jika tidak, apa yang paling dekat?
bash
shell-script
Martin Vegter
sumber
sumber
shopt -s nocasematch
mungkin membantu jika Anda ingin pencarian menjadi case-sensitive.[[
dan]]
-[
dan]
tidak cukup.[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
sumber
Bagaimana tentang:
Kemudian:
sumber
sumber
$WORD
kosong, maka akan cocok jikaWORD=ca
atauWORD=og
atau serupa dan saya menganggap Anda berartiecho ${set[@]}
.Anda bisa mendefinisikan fungsi bash untuk ini:
Kemudian gunakan seperti ini:
sumber
saya sedang mencari solusi 'satu baris' untuk memvalidasi argumen skrip saya, dan menggunakan Joseph R. jawaban di atas untuk menghasilkan:
[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
sumber
Ini bekerja untuk saya:
sumber
Anda mungkin ingin memasukkan daftar kata ke dalam file, jika Anda sering mengubah daftar, atau Anda ingin itu dibagikan oleh banyak skrip. Dan Anda mungkin perlu memasukkan kata-kata ke dalam file jika daftar terlalu panjang untuk dikelola dalam skrip. Maka Anda bisa mengatakannya
sumber
Jika kata-kata adalah daftar di mana nilai dipisahkan oleh baris baru, Anda dapat melakukan:
sumber
Anda dapat menggunakan fgrep untuk menentukan semua kata yang diizinkan:
The
-w
bendera cocok hanya kata-kata penuh,-q
bendera membuatnya beroperasi diam-diam (karena semua yang kita butuhkan adalah nilai kembali untuk jika pernyataan untuk digunakan), dan masing-masing-e
pola Menentukan pola untuk memungkinkan.fgrep
adalah versi grep yang melakukan pencocokan string normal dan bukan pencocokan regex. Jika sudahgrep
, Anda harus melakukannyafgrep
, tetapi jika tidak, itu identik dengan menggunakangrep
dengan-F
flag (jadi Anda hanya perlu menggantifgrep -wq
dengan di atasgrep -Fwq
).sumber