Wie man numerische Variablen in zsh (und vielleicht auch in bash) auf Null setzt?)
Frage
Wenn ich in zsh eine Reihe von Dateien mit zsh erstellen muss, mache ich normalerweise so etwas wie:
for x in $(seq 1 1000); do .....; done
Das funktioniert gut, es gibt mir Dateien mit Namen foo-1.txt
.. foo-1000.txt
.
Diese Dateien werden jedoch nicht gut sortiert, daher möchte ich die auf Null setzen $x
variabel, wodurch Namen von erzeugt werden foo-0001.txt
.. foo-1000.txt
.
Wie macht man das in zsh?(und Bonusfrage, wie geht das in Bash?)
Lösung
Verwenden Sie die -w
flagge zu seq
(in jeder Schale):
$ seq -w 1 10
01
02
03
04
05
06
07
08
09
10
Andere Tipps
Zum Referenz willen, wenn Sie keine Kontrolle über die Erzeugung der numerischen Werte haben, können Sie die Polsterung mit:
tun generasacodicetagpre.Sie können Bashs Brace-Erweiterung :
generasacodicetagpre.arbeitet auch in ZSH.
arbeitet in Bash (weiß nicht für ZSH):
generasacodicetagpre.- .
-
druckf
Die Verwendung von Printf zum Pad mit Nullen funktioniert in jeder Shell:$ printf 'foo%03d.txt\n' $(seq 4) foo001.txt foo002.txt foo003.txt foo004.txt $ printf 'foo%03d.txt\n' {1..4} # works in bash, ksh, zsh. $ n=4; printf 'foo%03d.txt\n' {1..$n} # only ksh, zsh $ n=4; eval printf '"foo%03d.txt\n" {1..'"$n"'}' # workaround needed for bash
-
Brace-Erweiterung verwenden (nur Bash und ZSH halten die führenden Nullen KSH nicht).
$ printf '%s\n' foo{1..004}.txt foo001.txt foo002.txt foo003.txt foo004.txt