Hier ist mein Skript:
#!/bin/bash
declare -a a=(`ls`)
declare -a b=()
declare -a sorted_arr=()
var =0
while [ -n "${a[$var]}" ]
do
echo "${a[$var]:0:10} |"
var=`expr $var + 1`
done
Dieses Skript erzeugt inkonsistente Abstände
another_fi |
f2.txt |
file1.txt |
file3.txt |
Ich möchte, dass vertikale Pipelinesymbole ausgerichtet werden
another_fi |
f2.txt |
file1.txt |
file3.txt |
Antworten:
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: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 folgenderwhile IFS= read -r -d ''
Struktur verwenden: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 istfind
plus die Subshell, in der ausgeführt wirdwhile
):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.
quelle
./3.wav | ./1.wav | ./2.wav |
wenn ich ./randomfi nicht einschließen möchte.