ubuntuusers.de

BASH: Integer-Zahlen rechtsbündig (mit führenden BLANKs)

Status: Gelöst | Ubuntu-Version: Kubuntu 22.04 (Jammy Jellyfish)
Antworten |

michahe

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Sorry, ich pack's nicht: Integer Zahlen sollen rechtsbündig formatiert in eine Variable ...

printf "%+6s\n" 7777
  1234   # so ist es gewünscht, aber das soll in die Variable qq
$ qq=$(printf "%+5s\n" 7777)
$ echo $qq
1234
$ printf -v qq "%+5s\n" 7777
$ echo $qq
1234

Wo ist mein Fehler?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Wenn du die Variable nicht quotest, splittet die Shell die eingegebene Zeile nach der Variablensubstitution am IFS auf - damit verlierst du die führenden Leerzeichen:

1
2
v=$(printf "%+6s\n" 7777)
echo "$v"

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Danke seahawk1986, das hätte ich ewig gesucht ...

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Für solche Sachen kann es helfen den Debug-Modus der Shell einzuschalten (set -x, mit set +x macht man das wieder Rückgängig) - da sieht man den Unterschied schön:

$ set -x
$ v=$(printf "%+6s\n" 7777)
++ printf '%+6s\n' 7777
+ v='  7777'
$ echo $v
+ echo 7777
7777
$ echo "$v"
+ echo '  7777'
  7777 

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17620

Wohnort: Berlin

seahawk1986 schrieb:

Wenn du die Variable nicht quotest, splittet die Shell die eingegebene Zeile nach der Variablensubstitution am IFS auf - damit verlierst du die führenden Leerzeichen:

1
2
v=$(printf "%+6s\n" 7777)
echo "$v"

Aber 1234 sollte es trotzdem nicht ausgeben 😉 .

Antworten |