2017-01-31 2 views
1

Heyhey, da dies mein erster Beitrag ist bitte geduldig :) Ich versuche mein Bestes.BASH Grep Ergebnis als Array-Name

Ich versuche, die Sprache aus meinem System (osx) "grep" und nehmen Sie dies als String-Namen, um eine Sprache festzulegen.

Ich habe ein paar Strings bekam $en['a' 'b' 'c'] genannt, irgendwo $de['d' 'e' 'f'] und $fr['g' 'h' 'i'] ...

Ich benutze:

language=$(locale | grep LANG= | cut -d'"' -f2 | cut -d_ -f1) 

, die mir einen ISO-Wert wie en gibt, fr, de ...

Hier kommt mein Hauptproblem. Ich kann einfach nicht einfach ${language[*]} verwenden. Es fühlt sich an, als ob ich alles versucht habe. Versuchen Sie bereits einen Fehler mit {}()'' und $.

Das Einzige, was fand ich heraus, beim Debuggen language Ergebnisse in

language=ISO ist (so das funktioniert richtig)

und wenn ich versuche, diesen Wert als meine gewünschte Zeichenfolge

echo ${language[*]} , ${language[0]} , ${language[1]} 

Ergebnisse zu erhalten in

ISO , ISO , 

was nicht ist richtig. Es scheint, als würde ich eine neue Zeichenfolge erstellen, aber ich möchte die vorhandenen verwenden. keine weitere Keywords Wisst :(Syntax

+0

Was genau ist die Eingabe? Welche Leistung erwarten Sie? – choroba

+0

Ich habe gerade ein paar Eingaben eingegeben. Ich erwarte, dass die Ausgabe von $ {en [@]} und $ {language [@]} gleich ist. – cr4nk89

Antwort

0

Diese verwenden alle Array to google:

echo ${language[*]} , ${language[0]} , ${language[1]} 

Aber die Art und Weise Sie die Variable erstellt, ist dies nicht ein Array ist, ist dies eine einfache Variable:

language=$(locale | grep LANG= | cut -d'"' -f2 | cut -d_ -f1) 

seinen Wert zugreifen zu können, verwenden Sie einfach $language, zum Beispiel:

echo $language 

Auch die Pipeline mit locale, grep und erhält die ersten zwei Zeichen der LANG Variable in einer sehr ineffizienten Weise. Sie können es mehr bekommen effizient einen Teil mit:

language=${LANG:0:2} 

Wenn Sie ein Array verwenden mögen (obwohl ich den Punkt hier nicht sehen), dann müssen Sie Klammern um die Werte setzen zuweisen, zum Beispiel :

language=(${LANG:0:2}) 

dieses Array in diesem Beispiel ein Element hat, können Sie den Wert wie folgt zugreifen:

echo ${language[0]} 

Beachten Sie, dass die Syntax von Bash ist sehr streng mit r Achten Sie auf Symbole und Räume, jedes kleine Detail kann einen großen Unterschied machen, deshalb ist es wichtig, genau zu schreiben.

Sie können Ihre Skripte in shellcheck.net einfügen, um nach trivialen Fehlern zu suchen. Sie können mehr über Arrays in man bash lesen.

+0

Sollte ich Array-Syntax nicht verwenden, wenn ich Strings in Arrays habe? Du hast Recht, das ist wirklich effizienter, danke. Kann immer noch nicht über $ language [] – cr4nk89

+0

auf mein Array zugreifen, es wird entweder ein Array oder eine Zeichenkette sein (das verstehst du, oder?). Wenn Sie wirklich ein Array wollen, tun Sie 'language = ($ (local ..... | ....))'. Viel Glück. – shellter