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
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top