Gentoo Archives: gentoo-user-de

From: Markus Wagner <markus.wagner@×××××××××.net>
To: gentoo-user-de@l.g.o
Subject: Re: [gentoo-user-de] OT: bash () bei variablen
Date: Tue, 08 Jan 2013 14:11:04
Message-Id: 50EC28D5.3080708@sledge-it.net
In Reply to: Re: [gentoo-user-de] OT: bash () bei variablen by jens wefer
1 Hi Jens,
2
3 ${ip_neu[0]} kann nicht klappen, da ip_neu nur ein String ist.
4 Hier ein kurzes Beispiel:
5 ---------------
6 #!/bin/bash
7 cat > e << EOF
8 123 456
9 789
10 EOF
11 ip_neu=`cat e`
12
13 ip=(${ip_neu})
14 echo $ip_neu
15 echo ${ip}
16 echo ${ip[0]}
17 echo ${ip[1]}
18 ----------------
19 liefert:
20 ----------------
21 123 456 789
22 123
23 123
24 456
25 ----------------
26
27 Soweit ich die bash-internals verstanden habe, wird bei der Erzeugung
28 des Arrays "ip" der IFS als Trennsymbol berücksichtigt. Als Konvention
29 für die Dereferenzierung von ip wird ohne Index stets der erste Eintrag
30 zurückgeliefert - angelehnt an Dereferenzierung von Arrays in C...
31
32 Cheers,
33
34 Markus
35
36 On 08.01.13 00:05, jens wefer wrote:
37 > Am Mon, 07 Jan 2013 07:22:25 +0100
38 > schrieb Florian Philipp <lists@×××××××××××.net>:
39 >
40 >> Am 07.01.2013 02:27, schrieb jens wefer:
41 >>>
42 >>> [...]
43 >>>
44 >>
45 >> `ip=($ip_neu)` erzeugt ein Array ip. `$ip` gibt dir den ersten
46 >> Eintrag, also genauso wie `${ip[0]}`. Weil du `$ip_neu` nicht escaped
47 >> hast (`ip=("$ip_neu")`), ist jeder Eintrag whitespace-terminiert.
48 >>
49 >> --
50 >> Florian
51 >
52 > echo ${#ip_neu[@]} gibt 1 aus, also nur 1 element
53 > ip=${ip_neu[0]} gibt mir alles im test 1219 zeichen
54 > ip=($ip_neu) gibt 1.ip (getrennt durch space zur 2.
55 > so wie ich dich verstanden hab muesste ${ip_neu[0]} mir auch doie erste
56 > ip geben, tut es aber nicht.
57 >
58 > bye, jens.
59 >