Wie zu überprüfen, ob ein arg ein gültiger Dateiname in Shell ist?
-
11-09-2019 - |
Frage
ich brauche, um zu überprüfen, ob die args gültige Dateinamen sind, dann ist dies der richtige Weg, es zu tun? Es scheint, wie ich einige Fehler inline 2 gemacht, aber ich weiß nicht, wo.
for i in ${@}; do
if [ -f ${i}]; then
echo ${i}
else continue
fi
done
Lösung
Zunächst einmal müssen Sie ein Leerzeichen vor dem Schließen eckige Klammer. Und Sie sollten Ihre Variablen im Fall zitieren es gibt einen Raum in einem Dateinamen.
for i in "${@}"; do
if [ -f "${i}" ]; then
echo "${i}"
else continue
fi
done
Die „else continue
“ ist nicht erforderlich, es sei denn, dass ein Platzhalter für etwas, das sonst planen Sie anstelle von „continue
“ zu setzen.
Andere Tipps
Hier ist eine lapidare Lösung, die auch dann, wenn die Dateinamen Leerzeichen enthalten funktioniert:
for i
do
test -f "$i" && echo "$i"
done
Hinweis , dass die für die Anweisung, um die Befehlszeilenargumente übernimmt, gibt es keine Notwendigkeit mehr zu geben. Der Testbefehl ist ein kurzer Weg von, wenn .. dann .. fi
-f überprüft, ob $ {i} eine reguläre Datei ist.