In meinem Bash-Skript integer Längen Festsetzung ich Set-up die folgenden Operationenseltsames Verhalten, wenn in bash
year=0050
echo $(printf %04d $year)
>0040
Ich verstehe nicht, warum 0040 statt 0050. zurückgegeben ich schließlich, dass gefunden, das System zu erhalten um 0050 korrekt auszudrucken, muss ich dies stattdessen tun.
year=50
echo $(printf %04d $year)
>0050
Gibt es irgendwelche Einsichten, warum der erste Fall passiert?
Wenn Sie Ihre Nummer mit '0' beginnen, wird sie als oktal interpretiert; Oktal 50 ist Dezimal 40. –
Numerische Argumente zu 'printf' mit einer führenden '0' werden als Oktalzahlen interpretiert. Warum rufen Sie auch 'echo $ (printf ...)'? "echo" und "printf" drucken beide ihre Ausgabe. Sie können das Echo löschen. – larsks
@larks Das liegt vielleicht an Zeilenumbrüchen, aber offensichtlich ist das besser mit '% 04d \ n' gelöst. –