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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top