Pregunta

necesito para verificar si los argumentos son los nombres de archivo válidos, es esta la forma correcta de hacerlo? Parece que hice algún error en línea 2, pero no sé dónde.

for i in ${@}; do                                   
if [ -f ${i}]; then                             
    echo ${i}
else continue
fi
done
¿Fue útil?

Solución

En primer lugar, se necesita un espacio antes del corchete de cierre. Y usted debe citar sus variables en caso de que haya un espacio en un nombre de archivo.

for i in "${@}"; do 
if [ -f "${i}" ]; then
    echo "${i}"
else continue
fi
done

El "else continue" es innecesario, a menos que eso es un marcador de posición para otra cosa va a poner en su lugar de "continue".

Otros consejos

Aquí es una solución concisa, que funciona incluso si los nombres de archivo contienen espacios:

for i
do
    test -f "$i" && echo "$i"
done

Tenga en cuenta que la sentencia for asume los argumentos de línea de comandos, no hay necesidad de escribir más. El comando de prueba es una forma corta de si .. entonces .. fi

f comprueba que $ {i} es un archivo normal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top