Bash 3.2.57 Klammererweiterung {01..09}

Bash 3.2.57 Klammererweiterung {01..09}

Ich habe ein kleines Problem, ich kann nicht auf Bash v.4 umsteigen, ich muss Bash 3.2.57 verwenden. Ich gebe mein Skript in diesem Formular ein, logs_logs_2017-04-{02..06}.tar.bz2aber da Bash 3.2.57 keine Klammererweiterung mit führenden Nullen unterstützt, wird das Skript mit Folgendem gefüttert logs_logs_2017-04-2.tar.bz2 logs_logs_2017-04-3.tar.bz2 .....und diese Dateinamen existieren nicht.

Irgendeine Idee ?

Danke !

Antwort1

Umgehen Sie die führende Null:

somecmd logs-0{2..9}.tar.bz2  logs-{10..15}.tar.bz2

(Das 02..06im Beispiel ist auf diese Weise trivial zu handhaben.)

Oder verwenden Sie printf:

somecmd $(printf "logs-%02d.tar.gz " {2..15})

Dies basiert auf der Worttrennung und funktioniert nur, solange der Dateiname keine Glob-Zeichen oder Leerzeichen enthält.

Richtig gemacht wäre das unkompliziert, aber etwas lang:

files=()
for x in {2..15} ; do
    files+=( "$(printf "logs-%02d.tar.gz" $x)" )
done
somecmd "${files[@]}"

verwandte Informationen