${!test} -> was ist das ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
lisan
Beiträge: 658
Registriert: 22.02.2003 19:05:04
Wohnort: Berlin
Kontaktdaten:

${!test} -> was ist das ?

Beitrag von lisan » 09.06.2008 17:35:46

Hi,

ich verstehe das folgende script nicht:

Code: Alles auswählen

#!/bin/bash

test="foobar"
declare $test="barfoo"

echo $test
echo ${!test}
walter3@wks-arvid:~$ sh ./test.sh
foobar
barfoo

Was bedeutet der Ausdruck ${!test} in bezug zu der Variablen test ?

FitzeFatze
Beiträge: 834
Registriert: 06.07.2004 10:08:21

Re: ${!test} -> was ist das ?

Beitrag von FitzeFatze » 09.06.2008 17:40:22

genau sagen kann ichs dir nicht, da ich nicht shellscripten kann, aber ein "!" bedeutet normalerweise immer ein ungleich.

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: ${!test} -> was ist das ?

Beitrag von Meillo » 09.06.2008 17:45:05

mit 'declare' wird explizit ein Array angelegt. Es scheint, als gäbe es dann zwei Variablen 'test': einmal als Skalar und einmal als Array.
Das erste `echo' greift ganz normal auf den Skalar zu. Das zweite auf das Array.

siehe: man bash
(aber so ganz klar verständlich ist das da IMO auch nicht)
Use ed once in a while!

Benutzeravatar
lisan
Beiträge: 658
Registriert: 22.02.2003 19:05:04
Wohnort: Berlin
Kontaktdaten:

solved

Beitrag von lisan » 09.06.2008 18:17:57

hat sich erledigt.
Hm, schwer zu erklaeren. Scheint eine art zeigerersaetz zu sein.

Beispiel:

Code: Alles auswählen

#!/bin/bash

bla="a"
test_a=42
TEST="test_${bla}"
TEST="${!TEST}"
!TEST referenziert nicht test_a sondern den Wert von test_a also *test_a (c analogon).
Brrrrr.

Antworten