2014-10-22 6 views
6

enthält Ich habe eine Bash-Variable: agent1.ip mit 192.168.100.137 als Wert. Wenn ich es in echo Referenz:Referenz auf eine Bash-Variable, deren Name Punkt

echo $agent1.ip 

das Ergebnis:

.ip 

Wie auf den Wert zuzugreifen?

UPDATE: meine Variablen ist:

enter image description here

+6

Wie haben Sie das '.' in der Variablenname an erster Stelle? –

+2

In der Tat, wie @TomFenech darauf hinweist, ist das kein gültiger Variablenname. Es sollte nicht möglich sein, eine Variable mit diesem Namen zu * haben *. –

+0

Ich benutze ein Werkzeug, das meine Bash ausführen und es hat env Variable mit punktierten Namen ... –

Antwort

9

Bash selbst nicht Variablennamen mit Punkten in ihnen nicht versteht, aber das bedeutet nicht, dass Sie nicht eine solche Variable kann in Ihrem Umgebung. Hier ist ein Beispiel dafür, wie es zu setzen und sie alle in einem bekommen:

env 'agent1.ip=192.168.100.137' bash -c 'env | grep ^agent1\\.ip= | cut -d= -f2-' 
+0

Dann können Sie diesen Wert einem gültigen Bash-Variablennamen zuweisen. – Dettorer

+0

Die Grep Regex ist falsch, bitte zitieren Sie die \ oder es wird auch akzeptiert agent1_ip oder agent1-ip, etc. – drizzt

+0

@drizzt: du hast Recht, ich habe ein anderes '\' hinzugefügt, um das Muster richtig zu entkommen. –

0

Ist Ihr Code verschachtelt und mit Hilfe von Funktionen oder Skripte, die KSH verwenden?

Gepunktete Variablennamen sind eine erweiterte Funktion in ksh93. Ein einfacher Fall ist

$ a=1 
$ a.b=123 
$ echo ${a.b} 
123 
$ echo $a 
1 

Wenn Sie ersten Versuch a.b zuweisen, werden Sie

-ksh: a.b=123: no parent 

IHTH

2

Versuchen Sie diese:

export myval=`env | grep agent1.port | awk -F'=' '{print $2}'`;echo $myval 
+0

Beachten Sie, dass "." In "Grep" bedeutet "jedes Zeichen", so wird dies schlecht verhalten, wenn es z. 'agent1Sport'. Ebenso 'flagent1.port' oder' blagent1Sportier'.Siehe meine Antwort für einen exakteren Ausdruck. –

+0

ja du hast Recht. Ich hätte entkommen sollen. – SMA

2

Da bash.ip nicht eine gültige Kennung in bash, die Umgebungszeichenfolge bash.ip=192.168.100.37 wird nicht zum Erstellen einer Shell-Variablen beim Shell-Start verwendet.

Ich würde awk, ein Standard-Tool, verwenden, um den Wert aus der Umgebung zu extrahieren.

bash_ip=$(awk 'BEGIN {print ENVIRON["bash.ip"]}') 
Verwandte Themen