Saya kira saya tidak jelas tentang bagaimana melakukan tes "dan". Saya ingin memastikan ada argumen yang bekerja dengan baik [ -e $VAR ]
, tetapi ternyata itu juga mengevaluasi benar pada string kosong; yang tidak saya inginkan.
Bagaimana saya dan mereka bersama? Atau ada tes unary lain yang memenuhi apa yang saya inginkan?
bash
; namun, untuk memanfaatkan sepenuhnya "bashism", lihat jawaban @ paxdiablo.-a
.Dari halaman
bash
manual:Dan, untuk ekspresi, salah satu opsi adalah:
Jadi Anda bisa
and
bersama mereka sebagai berikut (-n
adalah kebalikan dari-z
sehingga kita dapat menyingkirkan!
):Namun, saya pikir itu tidak diperlukan dalam kasus ini,
-e xyzzy
benar jikaxyzzy
file tersebut ada dan dapat dengan mudah menangani string kosong. Jika itu yang Anda inginkan maka Anda sebenarnya tidak memerlukan-z
cek kosong:Dengan kata lain, cukup gunakan:
sumber
[[ -e "$var" ]] && echo "'$var' exists"
sumber
POSIX
tidak mendefinisikan perilaku[
dengan set tes yang kompleks, kita harus menghindari menggunakan-a
atau-o
dengan[
. Saya membacanya di sini .bash
tag dan tidak menyebutkan tentang POSIX, jadi saya memposting versi ini yang berfungsi di bawahbash
dan beberapa shell modern lainnya.bash
atau kerang modern lainnya, bahkan ada lebih sedikit alasan untuk merekomendasikan-a
.[ "$var1" -o "$var2" ]
; jikavar1=(
danvar2=)
, maka yang kita miliki adalah ujian apakah-o
tidak kosong, bukan apakah salah satuvar1
atauvar2
tidak kosong. Ambiguitas semacam ini adalah satu-satunya alasan yang sah untukx$var
ungkapan dalamtest
perintah modern (yaitu, pasca-90-an) dengan kutipan yang benar, dan idiom itu harus mati dalam api.Cukup kutip variabel Anda:
Ini mengevaluasi
[ -e "" ]
apakah$VAR
kosong.Versi Anda tidak berfungsi karena dievaluasi ke
[ -e ]
. Sekarang dalam kasus ini, bash hanya memeriksa apakah argumen tunggal (-e
) adalah string yang tidak kosong.Dari halaman manual:
(Juga, solusi ini memiliki manfaat tambahan untuk bekerja dengan nama file yang mengandung spasi)
sumber
Saya menemukan jawaban sekarang. Terima kasih atas saran Anda!
Ada komentar tentang itu? Tampaknya tidak efisien untuk melakukan grep dua kali, tetapi berhasil ...
sumber