Bruno Hertz wrote on 24/03/2005 00:01:
[stripped]
Also irgendwie ist das Verhalten der Bash bei mir schon sehr merkw�rdig.
Voraussetzung: Verzeichnis mit leeren Dateien der Namen a b c d e f g A B C D E F G
weiterhin: Skript (../t.sh vom fraglichen Verzeichnis aus) mit folgendem Inhalt:
======================================================
#!/bin/bash
unset LC_CTYPE LC_ALL LC_COLLATE
export LC_CTYPE=$1
printenv | grep LC
for i in `echo [A-C]`; do
echo $i
done
======================================================Dann noch in der aktuellen interaktiven Shell LC_COLLATE=de_DE gesetzt. So, jetzt rufe ich das Skript auf:
# ../t.sh C LC_COLLATE=C A b B c C
H�? Laut Deiner Aussage m�sste das eigentlich nur A B und C (nach LC_COLLATE=C) ausgeben. Wenn ich statt C de_DE oder us_US angebe, dann bleibt die Ausgabe wie oben gezeigt.
Setze ich jetzt in meiner interaktiven Shell LC_COLLATE auf C (oder l�sche es samt der anderen LC_* Variablen), dann bleibt die Ausgabe des Scripts wieder v�llig unbeeindruckt vom �bergabeparameter, abgesehen von der Ausgabe der LC_COLLATE-Zeile. Nur sieht es diesmal so aus:
# ../t.sh de_DE LC_COLLATE=de_DE A B C
H�? Laut Deiner Aussage m�sste das Script eigentlich A b B c C ausgeben, oder?
Um es richtig sch�n zu machen, hier noch zwei Beispiele:
# LC_COLLATE=C ../t.sh de_DE LC_COLLATE=de_DE A B C
# LC_COLLATE=de_DE ../t.sh C LC_COLLATE=C A b B c C
Jetzt schlauer? Hint: Selbst die angeblichen Subshells sind nicht wirklich eigene Instanzen der Bash sondern werden intern aufgel�st. Da die Shell die Pattern Expansion macht, ist also fraglich, was bei ihrem Aufruf der Wert von LC_COLLATE war.
Und so habe ich das obige Script dazu gebracht, das zu tun, was ich wollte:
====================================================== #!/bin/bash
LOOPED=0
if [ "$1" = "-loop" ]; then
LOOPED=1
shift
fiunset LC_CTYPE LC_ALL LC_COLLATE export LC_COLLATE=$1
if [ "$LOOPED" = 0 ]; then
printenv | grep LC
$0 -loop "$@"
else
echo looped:
printenv | grep LC
for i in [A-C]; do
echo $i
done
fi
======================================================Alles klar?
Ciao, Sven
--
Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/
Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)

