2016-10-24 2 views
1

In meinem Bash-Skript habe ich eine Schleife über Dateien in einem Verzeichnis und eine einfache if-Anweisung, um nach bestimmten Dateien zu filtern. Allerdings verhält es sich nicht wie erwartet, aber ich verstehe nicht warum.Bash: Schleife mit if-Anweisung

(Ich weiß, dass ich für Dateierweiterungen bereits in dem for-Schleife Ausdruck filtern könnte (... in "*.txt"), aber der Zustand komplexer in meinem konkreten Fall ist.)

Dies ist mein Code:

#!/bin/bash 
for f in "*" 
do 
    echo $f 
    if [[ $f == *"txt" ]] 
    then 
     echo "yes" 
    else 
     echo "no" 
    fi 
done 

Die Ausgabe erhalte ich:

1001.txt 1002.txt 1003.txt files.csv 
no 

Was würde ich erwarten:

1001.txt 
yes 
1002.txt 
yes 
1003.txt 
yes 
files.csv 
no 

Antwort

1

Falsches Problem in Ihrem Skript. Sie haben ein weiteres Zitat oben in glob und ein Zitat in echo fehlt.

es hat auf diese Weise:

for f in * 
do 
    echo "$f" 
    if [[ $f == *"txt" ]] 
    then 
     echo "yes" 
    else 
     echo "no" 
    fi 
done 
  • for f in "*" Schleife wird nur einmal mit f als wörtlichen *
  • Unquoted echo $f* zur Ausgabe all passenden Dateien/Verzeichnisse im aktuellen Verzeichnis erweitern.
+1

Ich wusste, dass es so einfach war ... danke! – Tobias