Come verificare se un arg è un nome di file valido Shell?
-
11-09-2019 - |
Domanda
Ho bisogno di verificare se le args sono nomi di file validi, è questo il modo giusto per farlo? Sembra che ho fatto qualche errore in linea 2, ma non so dove.
for i in ${@}; do
if [ -f ${i}]; then
echo ${i}
else continue
fi
done
Soluzione
Prima di tutto, è necessario uno spazio prima della parentesi quadra di chiusura. E si dovrebbe citare le variabili nel caso in cui ci sia uno spazio in un nome di file.
for i in "${@}"; do
if [ -f "${i}" ]; then
echo "${i}"
else continue
fi
done
Il "else continue
" non è necessaria, a meno che questo è un segnaposto per qualcosa d'altro si prevede di mettere in atto di "continue
".
Altri suggerimenti
Ecco una soluzione concisa, che funziona anche se i nomi di file contengono spazi:
for i
do
test -f "$i" && echo "$i"
done
Si noti che l'istruzione for assume gli argomenti della riga di comando, non v'è alcuna necessità di digitare più. Il comando test è un breve tratto di se .. poi .. fi
-f verifica che $ {i} è un file regolare.