2016-05-31 8 views
1

Ich versuche, ein Array mit mehreren Variablen wie folgt zu initialisieren.Bash: Kann Strings <<< mit mehreren Variablen als Eingabe arbeiten?

StringOne="This is a Test String" 
StringTwo="This is a New String" 
read -r -a Values <<< "$StringOne" "$StringTwo" 

aber es scheint wie Array wird Werte immer nur von der ersten Variablen .ie stringOne

$ echo ${Values[0]} 
This 
$ echo ${Values[1]} 
is 
$ echo ${Values[2]} 
a 
$ echo ${Values[3]} 
Test 
${Values[4]} 
String 
$ echo ${Values[5]} 

$ echo ${Values[6]} 

$ 

Was ist falsch an dieser Art und Weise für Feldinitialisierung Variablenwert von geben? Können wir mehrere Variablen mit < < < Operator übergeben?

+0

Ich möchte '$ {Werte [5]} = Dies $ {Werte [6]} = ist $ {Werte [7]} = a $ {Werte [8]} = Neu' ebenfalls –

+0

Löst das dein Problem ? 'read -r -a Werte <<<" $ StringOne $ StringTwo "' – gudok

+0

danke @gudok .dies funktioniert jetzt –

Antwort

2

Was ist falsch an dieser Art der Übergabe von Variablenwert für Array-Initialisierung? Können wir mehrere Variablen mit < < < Operator übergeben?

Ja und nein. Der Operator <<< nimmt ein Shell-Wort als seinen Operanden, wie in seiner Dokumentation ziemlich deutlich dargestellt wird. Aber Sie können die Werte mehrerer Variablen in einem einzigen Shell-Wort kombinieren durch geeignete Verwendung unter Angabe:

StringOne="This is a Test String" 
StringTwo="This is a New String" 
read -r -a Values <<< "$StringOne $StringTwo" 
echo "${Values[@]}" 

Ausgang:

Dies ist ein Test-String Dies ist eine neue String

+0

Ich dachte nicht daran, die Ausgabe mit Anführungszeichen zu kombinieren. Jetzt hab ich es verstanden . –

0

Verwendung:

read -r -a Values <<< "$StringOne"" ""$StringTwo" 

Oder:

read -r -a Values <<< "$StringOne"' '"$StringTwo" 

Oder:

out="$StringOne $StringTwo" 
read -r -a Values <<< "$out" 

oder eine andere Variation dieses Themas.

Dies funktioniert, weil die Zeichenfolge, die über <<< gesendet wird, das Ergebnis der Erweiterung von was rechts davon ist. Wir können beide Variablen durch Verkettung als eine lange Zeichenfolge darstellen lassen.

+2

Oder 'lesen -r -a Werte <<<" $ stringOne $ stringTwo "' – andlrc