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?)

War es hilfreich?

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.

    .
  1. 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
    
  2. 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
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top