Schleife über einen Satz von Zeichenfolgen, die Leerzeichen enthalten
Ich habe mehrere strings wie "a b", "c-d", "foo bar" und so weiter. Ich will eine Schleife über dieses set aus string und führen Sie eine Aktion für jede dieser. In dieser Aktion-ich nenne mehrere andere Skripte, so möchte ich nicht ändern, wenns für diese Schleife, da es brechen könnte mein Aufruf anderer Skripte. Dies ist der Grund, warum ich versuche zu entkommen, die Leerzeichen enthalten, in diesen Zeilen, aber ohne Erfolg.
Also zum Beispiel ich bekommen
a b
c d
Und ich habe versucht, die folgenden:
#!/bin/sh
x="a b"
y="c d"
echo "Attempt 1"
all="$x $y"
for i in $all ; do
echo $i
done
echo "Attempt 2"
all="a\ b c\ d"
for i in $all ; do
echo $i
done
echo "Attempt 3"
all=($x $y)
for i in ${all[@]} ; do
echo $i
done
echo "Attempt 4"
all='"'$x'" "'$y'"'
for i in $all ; do
echo $i
done
echo "Attempt 5"
for i in "$x" "$y" ; do
echo $i
done
echo "Attempt 6"
all2=("a b" "c d");
for i in ${all2[@]}; do
echo $i
done
echo "Attempt 7"
all3="a b c d"
echo $all3|
while read i; do
echo $i
done
Versuchen, nur 5 erfolgreich, aber ich möchte dies tun, ohne zu müssen, deklarieren Sie eine variable pro string(es wäre schmerzhaft zu halten). Ich habe gerade eingeführten x-und y zum testen, aber die Idee ist zu erklären, in der eine variable mit dem set "b" und "c d".
InformationsquelleAutor der Frage jolivier | 2013-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie wickeln Sie Variablen innerhalb von doppelten Anführungszeichen, sowohl in
all=("$x" "$y")
und"${all[@]}"
:Ausführen es gibt:
Update
Vermeiden, verwenden Sie eine andere variable für jede saite, tun Sie den folgenden:
InformationsquelleAutor der Antwort fedorqui
Dein problem ist der Mangel zu zitieren. Ohne zu zitieren, das Wort Spaltung Auftritt:
Verwendung eines array ist die eleganteste Lösung, und natürlich
x
undy
sind überflüssig. Sie können genauso gut tun:InformationsquelleAutor der Antwort Adrian Frühwirth