Path: csiph.com!eternal-september.org!feeder.eternal-september.org!nntp.eternal-september.org!.POSTED!not-for-mail From: Helmut Waitzmann Newsgroups: de.comp.os.unix.shell Subject: Re: System und Shell-Scripte: Latin-1 zu UTF-8 Date: Sun, 08 Mar 2026 03:40:09 +0100 Organization: A noiseless patient Spider Lines: 92 Sender: Helmut Waitzmann <12f7e638@mail.de> Message-ID: <83fr6b11ti.fsf@helmutwaitzmann.news.arcor.de> References: <87ms0jqp7f.fsf@s-bot.de> <1ppu7m-b4u.ln1@tempo.martinkl.dialup.fu-berlin.de> Reply-To: Helmut Waitzmann Anti-Spam-Ticket.b.qc3c MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Injection-Date: Sun, 08 Mar 2026 02:42:05 +0000 (UTC) Injection-Info: dont-email.me; posting-host="0adf1c18405b4b7a953052b0a5b93935"; logging-data="2170061"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+Qf3dUsy3mFhOLw6aysHJtJ/d3PSB271Q=" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) Cancel-Lock: sha1:MjufsZxrfXlxuJcqMsFkKUNr/7Q= sha1:ALjYP8y7/BqgVLz4fsIUAWsos0I= Mail-Copies-To: nobody Mail-Reply-To: Helmut Waitzmann Anti-Spam-Ticket.b.qc3c Xref: csiph.com de.comp.os.unix.shell:14657 Martin Klaiber : > Stefan Wiens wrote: > >> Abgesehen vom Konvertieren der Skripte=20 >> mittels iconv sollte man auch darauf=20 >> achten, dass s=C3=A4mtliche dort verwendeten=20 >> Tools UTF-8-kompatibel sind und auf die=20 >> locale, insbesondere LC_CTYPE ad=C3=A4quat=20 >> reagieren.=20 > > Ja, danke, guter Tipp!=20 > > Denkst Du an ein bestimmtes Szenario?=20 > > Ich habe jetzt schon das "Problem", dass printf das Komma als=20 > Dezimaltrennzeichen bei einer deutschen locale kennt, aber bc nicht,=20 > sondern nur den Punkt.=20 > > Ich meine so etwas wie:=20 > > | martinkl@maurice:~$ printf "%f\n" $(echo "4/3" | bc -l) > | -bash: printf: 1.33333333333333333333: invalid number > | 1,000000 > > Ich muss immer LC_NUMERIC=3DC setzen, damit printf den Dezimalpunkt=20 > akzeptiert:=20 > > | martinkl@maurice:~$ LC_NUMERIC=3DC printf "%f\n" $(echo "4/3" | bc -l) > | 1.333333 > Das Stand=E2=80=90alone=E2=80=90=E2=80=9Eprintf=E2=80=9C akzeptiert in ein= em Locale mit=20 Dezimalkomma sowohl den Punkt als auch das Komma als=20 Dezimaltrenner.=C2=A0 Hier im Vergleich zu den in die Shells=20 eingebauten =E2=80=9Eprintf=E2=80=9C=E2=80=90Kommandos:=20 ( for commandline in \ 'bash-built-in bash -c '\''"$@"'\'' bash' \ 'sh-built-in sh -c '\''"$@"'\'' sh' \ 'dash-built-in dash -c '\''"$@"'\'' dash' \ 'stand-alone env' do eval 'set -- '"$commandline" && printf '\n%s:\n' "$1 printf" && shift && "$@" printf '%f\n' '12.34' '12,34' done ) ohne LC_NUMERIC auf C zu setzen.=C2=A0 (Bei mir ist =E2=80=9E/bin/sh=E2=80= =9C ein=20 symbolic link auf =E2=80=9Ebash=E2=80=9C.)=20 Die Ausgabe sieht so aus:=20 bash-built-in printf: bash: line 1: printf: 12.34: invalid number 12,000000 12,340000 sh-built-in printf: sh: line 1: printf: 12.34: invalid number 12,000000 12,340000 dash-built-in printf: dash: 1: printf: 12,34: not completely converted 12.340000 12.000000 stand-alone printf: 12,340000 12,340000 Alternativ k=C3=B6nnte man auch die Ausgabe von =E2=80=9Ebc=E2=80=9C durch= =E2=80=9Etr=E2=80=9C=20 schieben, um jegliche Punkte durch Kommata zu ersetzen:=20 printf '%s\n' '4/3' | bc -l | ( dezimaltrenner=3D"$( locale -- decimal_point )" && tr -- . "$dezimaltrenner" )