Chcete-li navázat na komentář Stéphana Chazelase k odpovědi Kusalanandy:
$ ksh
$ echo ${.sh.version}
Version AJM 93u+ 2012-08-01
$ ls
TABLE1.csv TABLE2.csv
Použijte pole k uložení souborů. Začněte výrazem glob, který odpovídá některým souborům:
$ typeset -a files
$ files=( ~(N)*.csv )
$ echo "${#files[@]}"
2
$ typeset -p files
typeset -a files=(TABLE1.csv TABLE2.csv)
Nyní „holý“ globus, který se neshoduje, aby se ukázalo, že neodpovídající globus je nahrazen vzorem glob jako řetězec:
$ files=( *.txt )
$ echo "${#files[@]}"
1
$ typeset -p files
typeset -a files=('*.txt')
Nyní s předponou "null glob"
$ files=( ~(N)*.txt )
$ echo "${#files[@]}"
0
$ typeset -p files
(empty output)
$
Viz část Generování názvu souboru na vaší manuálové stránce ksh.
Chcete-li konkrétně odpovědět na vaši otázku:
typeset -a contents=( ~(N)"$gp_path"/ALLSTUFF*.zip )
if [[ ${#contents[@]} -eq 0 ]]; then
print 'EMPTY'
exit 0
else
print 'NOT EMPTY'
fi
Měli byste se zbavit zvyku používat názvy proměnných ALLCAPS.
Viz také:https://mywiki.wooledge.org/ParsingLs
Chybovou zprávu můžete nechat zmizet pomocí 2>/dev/null
uvnitř ls
.
Poté můžete zkontrolovat, zda $CONTENTS
je prázdný s -z
CONTENTS=$(ls -d -- "${gp_path}ALLSTUFF"*.zip 2>/dev/null)
if [ -z "$CONTENTS" ]; then
print 'EMPTY'
exit 0
else
print 'NOT EMPTY'
fi
Chcete-li zjistit, zda se vzor názvu souboru rozšiřuje na cokoli, můžete použít
set -- "$gp_path"ALLSTUFF*.zip
if [ -e "$1" ]; then
echo matched something
else
echo did not match anything
exit 1
fi
set
příkaz nastaví poziční parametry na názvy souborů odpovídající vzoru, a pokud existuje první odpovídající název souboru, pak se s něčím shodoval. Vzor zůstane nerozbalený, pokud se s ničím neshodoval.
To by bylo použitelné v ksh
, bash
a jakékoli další sh
-jako skořápka.