ubuntuusers.de

echo ... c awk .... . was bedeutet das ?

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

drnicolas

Anmeldungsdatum:
31. Oktober 2010

Beiträge: 133

Ich habe in einem Skript folgenden Code gefunden:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19

# Check if $string matches the regular expression $regex
# matchRegEx(string, regex)
# Returns 1 on success, 0 otherwise.
matchRegEx()
{
  string=$1
  regex=$2

  # Awk grep and sed ranges can't be trusted to gives the same result
  # on all platforms and locale. :( (Even for digit ranges...
  # fractions can be included in the 0-1 range.)
  # Using C locale should be enough to fix this.
  #echo $string | c ... 
  echo $string | c $AWK -F=!=!=!=!=!=!=!=!= '
    '$regex' {print 1; exit;}
    {print 0;}'

}

Der code fürhrt zu einem Fehler, dass "c" kein bekanntes Kommando ist.

Ich habe leider wenig mit bash zu tun. Was soll das bedeuten?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13197

Da kann man nur spekulieren, aber möglicherweise ist c so definiert:

1
2
3
c(){
  LC_ALL=C "$@"
}

Mit anderen Worten: die Variable LC_ALL wird nur für den Befehl auf "C" gesetzt, der als Argument übergeben wird, so dass dieser Befehl mit Locale C ausgeführt wird. So kann man sehen, was passiert:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
$ LC_ALL=C locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

Hier dann mit der Funktion:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
$ c(){
  LC_ALL=C "$@"
}
$ c locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

Im Schnipsel, den Du gepostet hast, wird vermutlich awk unter Locale C ausgeführt (siehe den Kommentar).

PS: Möglicherweise werden auch noch LANG und LANGUAGE gesetzt.

drnicolas

(Themenstarter)

Anmeldungsdatum:
31. Oktober 2010

Beiträge: 133

Das hat es tatsächlich rausgerissen! Vielen Dank

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13197

drnicolas schrieb:

Das hat es tatsächlich rausgerissen!

Dann bitte auch das Thema als "gelöst" markieren!

Vielen Dank

Bitte.

Antworten |