2017-07-03 1 views
-1

Ich versuche, eine Schleife in Bash zu machen. Getestet habe ich die Schleife mit for adr in a{a,b,c}d und es funktioniert perfekt mit aad, abd, acdWie verwende ich für ... In f {a, b, c, d} c, aber mit Variablen?

Aber wenn ich eine Variable mit dem Wert a{a,b,c}d haben, ist es nicht die oben genannten Werte zurückgeben; stattdessen läuft es nur einmal mit dem Wert a{a,b,c}d.
Wie aktiviere ich dies?

Alternativ Ich versuche, eine Eingabe vom Benutzer zu nehmen, und dann alle Instanzen ~const~ mit {b,c,d,f,g...y,z} ersetzen und dann die Schleife läuft ich oben beschrieben.

Leider, wie gesagt, es funktioniert nicht. Gibt es einen anderen Weg, um das funktionieren zu lassen?

+0

Siehe auch: [wie Variablen mit Klammernerweiterung verwenden] (https://stackoverflow.com/q/33491233/3776858) – Cyrus

Antwort

1

Dieser Code ist ein Umweg, um zu tun, was Sie wollen. Es gibt alles, was auf einer neuen Zeile:

test=(a b c) #declare the array 
for index in "${test[@]}"; do #uses for loop to go through each item in the array 
echo "{a{$index}d}" | tr -d '{}'; #echoes the result without curly braces 
done 

Hoffnung das war, was Sie suchen!

+0

Es ist fast was ich will. Nur der Unterschied, das 'a' und das 'd', sollen auch Variablen sein, die der Benutzer eingibt. In der Tat wird der Benutzer ein ~ const ~ d eingeben, und ich möchte abd, acd, add, afd ... anzeigen –

+0

Sie müssen nicht "{}' echo "und dann entfernen Sie sie mit" tr ". Echo "a $ {index} d" 'oder im Falle von Variablen echo" $ {start} $ {index} $ {end} "' wobei 'start =" a " 'und' end = "d" ' –

+0

Ich weiß, dass dies etwas älter ist, aber Sie könnten meine Antwort bearbeiten. Anstelle von" test = (abc) "könnten Sie" test = ($ a $ b $ c) "haben. " – Nythepegasus

0

Dies sind einige Lösungen:

$ aa=(a{a,b,c}d);for adr in ${aa[@]};do echo "$adr";done #using array 
aad 
abd 
acd 

$ aa=$(echo a{a,b,c}d);for adr in ${aa};do echo "$adr";done #without array 
aad 
abd 
acd 

Dies ist, wie oben mit Variablen arbeiten können:

$ start="a" 
$ var1="a" 
$ var2="b" 
$ var3="c" 
$ end="d" 
$ aa=$(echo $start{${var1},${var2},${var3}}$end) 
$ for adr in $aa;do echo "$adr";done 
aad 
abd 
acd 
+0

Sie haben Recht, ich habe versehentlich eine zusätzliche Schleife hinzugefügt. Jetzt entfernen –

+0

Ich habe beides versucht, was Sie vorgeschlagen haben. Sie arbeiten perfekt im Terminal, aber wenn ich versuche, in den Code zu implementieren, kommt der Wert von $ adr zu einem {b, c, d} d, selbst innerhalb der Schleife. Liegt das daran, dass ich den Wert von $ aa als Eingabe verwende? –

+0

@ 15KanurajBeri Siehe Update in meiner Antwort, wie Sie dies mit Variablen arbeiten können. –

Verwandte Themen