Para dar seguimiento al comentario de Stéphane Chazelas a la respuesta de Kusalananda:
$ ksh
$ echo ${.sh.version}
Version AJM 93u+ 2012-08-01
$ ls
TABLE1.csv TABLE2.csv
Utilice una matriz para contener los archivos. Comience con una expresión global que coincida con algunos archivos:
$ typeset -a files
$ files=( ~(N)*.csv )
$ echo "${#files[@]}"
2
$ typeset -p files
typeset -a files=(TABLE1.csv TABLE2.csv)
Ahora, un globo "desnudo" que no coincide para demostrar que un globo que no coincide se reemplaza por el patrón de globo como una cadena:
$ files=( *.txt )
$ echo "${#files[@]}"
1
$ typeset -p files
typeset -a files=('*.txt')
Ahora con el prefijo "glob nulo"
$ files=( ~(N)*.txt )
$ echo "${#files[@]}"
0
$ typeset -p files
(empty output)
$
Consulte la sección Generación de nombres de archivo de su página man de ksh.
Para responder específicamente a su pregunta:
typeset -a contents=( ~(N)"$gp_path"/ALLSTUFF*.zip )
if [[ ${#contents[@]} -eq 0 ]]; then
print 'EMPTY'
exit 0
else
print 'NOT EMPTY'
fi
Debe abandonar el hábito de usar nombres de variables en MAYÚSCULAS.
Ver también:https://mywiki.wooledge.org/ParsingLs
Puedes hacer desaparecer el mensaje de error con 2>/dev/null
dentro del ls
.
A continuación, puede comprobar si $CONTENTS
está vacío con -z
CONTENTS=$(ls -d -- "${gp_path}ALLSTUFF"*.zip 2>/dev/null)
if [ -z "$CONTENTS" ]; then
print 'EMPTY'
exit 0
else
print 'NOT EMPTY'
fi
Para detectar si un patrón de nombre de archivo se expande a algo, puede usar
set -- "$gp_path"ALLSTUFF*.zip
if [ -e "$1" ]; then
echo matched something
else
echo did not match anything
exit 1
fi
El set
El comando establece los parámetros posicionales en los nombres de archivo que coinciden con el patrón, y si existe el primer nombre de archivo coincidente, entonces coincidió con algo. El patrón permanece sin expandir si no coincide con nada.
Esto sería utilizable en ksh
, bash
y cualquier otro sh
-como concha.