Variablensubstitution in einer for-Schleife mit {$ var}

7

Ich bin sehr neu im Bash-Scripting und versuche mit diesem kleinen Skript, das einfach nach einer Reihe von Zahlen fragt, zu üben. Ich würde ex eingeben. 5..20 und es sollte den Bereich drucken, aber es ist nur Echo zurück, was ich auch eingeben ("5..20" in diesem Beispiel) und die Variable nicht erweitert. Kann mir jemand sagen, was ich falsch mache?

Skript:

%Vor%     
ZDRuX 27.03.2011, 04:48
quelle

4 Antworten

15
  1. Brace-Erweiterung in bash erweitert keine Parameter (im Gegensatz zu zsh)
  2. Sie können dies umgehen durch die Verwendung von eval und Befehlssubstitution $()
  3. eval ist schlecht, weil Sie Ihre Eingaben bereinigen müssen, da die Benutzer Bereiche wie rm -rf /; und eval eingeben können, die
  4. ausführen
  5. Verwenden Sie nicht das Schlüsselwort function , es ist nicht POSIX und wurde veraltet
  6. Verwenden Sie read 's -p flag anstelle von echo

Aber zu Lernzwecken würden Sie das so machen:

%Vor%

Hinweis: In diesem Fall ist die Verwendung von eval in Ordnung, weil Sie nur echo im Bereich

haben     
SiegeX 27.03.2011, 04:58
quelle
6

Eine Möglichkeit ist die Verwendung von eval , rohes Beispiel,

%Vor%

Der andere Weg ist die Verwendung von bash's C-Style for loop

%Vor%

Und der letzte ist schneller als der erste (zum Beispiel wenn Sie $ range & gt; 1 000 000 haben)

    
kurumi 27.03.2011 04:58
quelle
5

Eine Möglichkeit, die fehlende Erweiterung zu umgehen und die Probleme mit eval zu umgehen, ist die Verwendung von Befehlsersetzung und seq.

Überarbeitete Funktion (vermeidet auch Globals):

%Vor%     
Morgen 22.02.2013 20:24
quelle
-1

Verwenden Sie ${} für die variable Erweiterung. In Ihrem Fall wäre das $ {range}. Sie haben das $ in $ {} weggelassen, das für die variable Erweiterung und Ersetzung verwendet wird.

    
Rafe Kettler 27.03.2011 04:52
quelle

Tags und Links