2016-09-06 1 views
0

schrieb ich kleinen Bash-Skriptbash Gang Wert als Parameter Berechnung

for ((j=10;j<20; j++)) 
    do 
    ./b5 $j $[ $1 * 3 ] 
    done 

Welches Programm b5 ausgeführt werden soll und zwei Parameter, $ j und $ 1 multipliziert sendet von 3.

Wenn ich versuche, es zu laufen bekomme ich:

* 3 : syntax error: operand expected (error token is "* 3 ") 

Wie soll man es tun?

Antwort

1

Sie müssen $((..)) für arithmetische Ausdrücke verwenden.

Stattdessen

./b5 $j $[ $1 * 3 ] 

zu

./b5 $j $(($1 * 3)) 
+0

Sie müssen * nicht *; '$ [...]' ist eine veraltete, aber immer noch gültige Form der arithmetischen Expansion. Das größere Problem ist, dass "$ 1" scheinbar nicht gesetzt ist. – chepner

+0

@chepner, Ohh..ok. Ich habe es danke. Ich habe gerade den Unterschied in diesem Link gefunden: http://StackOverflow.com/Questions/2415724/Bash-arithmetic-Expression-VS-arithmetic-Expression – sat

+0

Ich frage mich, wenn es von 'bash' entfernt wird, obwohl; Es funktioniert immer noch in der kommenden Version 4.4. – chepner

1

Sie sollten expr $1 \* 3 tun, um Variable durch eine Ziffer zu multiplizieren.

+0

'$ ((...))' subsumiert fast vollständig den Bedarf nach 'expr' in einer POSIX-Shell. Das einzige, was Sie wirklich brauchen, ist der Ausdruck für reguläre Ausdrücke für Shells, die nicht bereits eigene enthalten. – chepner

1

ehrlich zu sein, beide Optionen funktionieren:

  • $ (($ 1 * 3))
  • $ [1 $ * 3]

aber das Problem war $ 1 wurde nicht initialisiert. Mein Fehler.