printf und Umlaute

19/02/2008 - 23:48 von Laurianne Gardeux | Report spam
$
Liste="Haus Brot Garten Stuhl elephant"
set -- $Liste
for Wort in $*; do printf "%+12s %s" "$Wort" "|"; done
Haus |
Brot |
Garten |
Stuhl |
elephant |

Liste="Haus Brot Gàrten Stuhl éléphant"
#.^...^.^..
set -- $Liste
for Wort in $*; do printf "%+11s %s" "$wort" "|"; done
Haus |
Brot |
Gàrten |
Stuhl |
éléphant |

echo $LANG
fr_CH.UTF-8

bash --version
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

Irgendwie ignoriert printf die Umlaute beim Abzàhlen von "%+11s".
Gerne möchte ich, dass auch im zweiten Beispiel Die Wörter schön
untereinander stehen - mit UTF-8. Hat jemand eine Idee?

Vielen Dank.

LG
 

Lesen sie die antworten

#1 Heike C. Zimmerer
20/02/2008 - 01:59 | Warnen spam
Laurianne Gardeux writes:

$
Liste="Haus Brot Garten Stuhl elephant"
set -- $Liste
for Wort in $*; do printf "%+12s %s" "$Wort" "|"; done
Haus |
Brot |
Garten |
Stuhl |
elephant |

Liste="Haus Brot Gàrten Stuhl éléphant"
#.^...^.^..
set -- $Liste
for Wort in $*; do printf "%+11s %s" "$wort" "|"; done
Haus |
Brot |
Gàrten |
Stuhl |
éléphant |
[..]
Irgendwie ignoriert printf die Umlaute beim Abzàhlen von "%+11s".
Gerne möchte ich, dass auch im zweiten Beispiel Die Wörter schön
untereinander stehen - mit UTF-8. Hat jemand eine Idee?



Das Verhalten ist korrekt; die Feldlànge bei printf ist als Anzahl von
Bytes und nicht als Anzahl von Zeichen festgelegt.

Ein möglicher Umweg:

$ for wort in $*; do printf "%$((10-${#wort}))s%s %s" "" "$wort" "|"; done
Haus |
Brot |
Gàrten |
Stuhl |
éléphant |

denn ${#var} zàhlt Zeichen.

Ähnliche fragen