Untuk menindaklanjuti komentar Stéphane Chazelas atas jawaban Kusalananda:
$ ksh
$ echo ${.sh.version}
Version AJM 93u+ 2012-08-01
$ ls
TABLE1.csv TABLE2.csv
Gunakan array untuk menyimpan file. Mulai dengan ekspresi glob yang cocok dengan beberapa file:
$ typeset -a files
$ files=( ~(N)*.csv )
$ echo "${#files[@]}"
2
$ typeset -p files
typeset -a files=(TABLE1.csv TABLE2.csv)
Sekarang glob "telanjang" yang tidak cocok untuk menunjukkan bahwa glob yang tidak cocok diganti dengan pola glob sebagai string:
$ files=( *.txt )
$ echo "${#files[@]}"
1
$ typeset -p files
typeset -a files=('*.txt')
Sekarang dengan awalan "null glob"
$ files=( ~(N)*.txt )
$ echo "${#files[@]}"
0
$ typeset -p files
(empty output)
$
Lihat bagian Pembuatan Nama File di halaman manual ksh Anda.
Untuk membalas pertanyaan Anda secara spesifik:
typeset -a contents=( ~(N)"$gp_path"/ALLSTUFF*.zip )
if [[ ${#contents[@]} -eq 0 ]]; then
print 'EMPTY'
exit 0
else
print 'NOT EMPTY'
fi
Anda harus keluar dari kebiasaan menggunakan nama variabel ALLCAPS.
Lihat juga:https://mywiki.wooledge.org/ParsingLs
Anda dapat menghilangkan pesan kesalahan dengan 2>/dev/null
di dalam ls
.
Anda kemudian dapat memeriksa untuk melihat apakah $CONTENTS
kosong dengan -z
CONTENTS=$(ls -d -- "${gp_path}ALLSTUFF"*.zip 2>/dev/null)
if [ -z "$CONTENTS" ]; then
print 'EMPTY'
exit 0
else
print 'NOT EMPTY'
fi
Untuk mendeteksi apakah pola nama file diperluas menjadi apa pun, Anda dapat menggunakan
set -- "$gp_path"ALLSTUFF*.zip
if [ -e "$1" ]; then
echo matched something
else
echo did not match anything
exit 1
fi
set
perintah mengatur parameter posisi ke nama file yang cocok dengan pola, dan jika ada nama file yang cocok pertama, maka itu cocok dengan sesuatu. Pola tetap tidak diperluas jika tidak cocok dengan apa pun.
Ini akan dapat digunakan di ksh
, bash
dan sh
lainnya -seperti cangkang.