Der Hauptgrund ist, dass Ihr Echo-Befehl x Zeichen von Variablen nimmt und 14 Leerzeichen auffüllt. Dies bedeutet, dass die Gesamtzahl der Zeichen im Ausgabezeichenfolgenbereich nicht konsistent ist.
Stattdessen möchten Sie möglicherweise den printf
Breitenbezeichner %-10s
für die linke Auffüllung wie folgt verwenden:
bash-4.3$ for i in "${a[@]}"; do printf "%-10s%-4s|\n" "${i:0:10}" " "; done
1.wav |
2.wav |
3.wav |
input.txt |
Auf diese Weise wird jede Variable, die Sie haben, so eingestellt, dass sie in 10 Zeichen passt, und auf diese 10 Zeichen setzen wir das 4. -
Zeichen, um jede Zeichenfolge linksbündig zu machen.
Die Nummer -10
in %-10s
sollte gleich bleiben, um sicherzustellen, dass auch wenn die Datei kürzer als 10 Zeichen ist, eine Zeichenfolge mit 10 Zeichen und aufgefüllten Leerzeichen angezeigt wird. Aber ein %-4s
Teil kann variiert werden. Zum Beispiel wird im obigen Beispiel %-4s
4 Leerzeichen vorhanden sein, aber wenn wir 14 Leerzeichen haben möchten, verwenden Sie %-14s
.
Beachten Sie, dass es generell empfohlen wird , die Ausgabe von ls nicht zu analysieren , was genau das ist, was Sie tun. Alternativ können wir find
Befehle mit folgender while IFS= read -r -d ''
Struktur verwenden:
bash-4.3$ find -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file;
> do
> printf "%-10s%-4s|\n" "${file:0:10}" " "
> done
./3.wav |
./1.wav |
./2.wav |
./.swp |
./input.tx |
Beachten Sie, dass dies find
rekursiv ist und daher auch in Unterverzeichnissen funktioniert. Wenn Sie dies vermeiden möchten, verwenden Sie die -maxdepth 1
Option.
Beachten Sie, dass es find
auch eine eigene -printf
Option gibt, die effizienter sein kann, um alles über einen Prozess als zwei zu erledigen (das ist find
plus die Subshell, in der ausgeführt wird while
):
$ find /bin -type f -printf "%-15f|\n" 2>/dev/null | head -n 5
hostname |
nc.traditional |
fusermount |
loadkeys |
zless |
Im Idealfall würde ich vorschlagen, alles in eine temporäre Datei zu schreiben, die längste Zeile (auch bekannt als längster Dateiname in der Datei) herauszufinden und so viele Leerzeichen wie möglich entsprechend aufzufüllen.