Comment vérifier si un arg est un nom de fichier valide dans Shell?
-
11-09-2019 - |
Question
Je dois vérifier si les args sont des noms de fichiers valides, est-ce la bonne façon de le faire? Il semble que je fait une erreur en ligne de 2, mais je ne sais pas où.
for i in ${@}; do
if [ -f ${i}]; then
echo ${i}
else continue
fi
done
La solution
Tout d'abord, vous avez besoin d'un espace avant le crochet fermant. Et vous devriez citer vos variables dans le cas où il y a un espace dans un nom de fichier.
for i in "${@}"; do
if [ -f "${i}" ]; then
echo "${i}"
else continue
fi
done
Le « else continue
» est inutile, à moins que c'est un espace réservé pour autre chose que vous envisagez de mettre en place des « continue
».
Autres conseils
Voici une solution laconique, qui fonctionne même si les noms de fichiers contiennent des espaces:
for i
do
test -f "$i" && echo "$i"
done
Notez que pour la déclaration prend les arguments de ligne de commande, il n'y a pas besoin de taper plus. La commande de test est une façon courte si .. alors .. fi
-f vérifie que $ {i} est un fichier régulier.