2016-09-06 6 views
0

は、私はプログラムB5を実行し、私はそれを実行しようとすると2つのパラメータ$ jと3bashの通過値

を掛け$ 1送信する必要があり、小さなbashスクリプト

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

を書きました、私は得る:

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

どのようにそれを行う必要がありますか?

答えて

1

算術式には$((..))を使用する必要があります。代わりに

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

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

あなたは*持っていません。 '$ [...]'は時代遅れですが、依然として有効な算術拡張形式です。より大きな問題は、 '$ 1'が設定されていないことです。 – chepner

+0

@chepner、Ohh..ok。私はそれを得た。私はちょうどこのリンクの違いを見つけました:http://stackoverflow.com/questions/2415724/bash-arithmetic-expression-vs-arastic-expression – sat

+0

私はそれが 'bash'から削除されるのは不思議です。今後の4.4リリースでも動作します。 – chepner

1

expr $1 \* 3に変数を桁で乗算する必要があります。

+0

'$((...))'は、ほとんどすべてのPOSIXシェルで 'expr'の必要性を包括しています。 'expr'のために本当に必要なのは、独自のシェルを提供していないシェルの正規表現マッチングだけです。 – chepner

1

に正直に言うと、両方のオプションは動作します:

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

でも、$ 1は初期化されていませんでした。私の間違い。

関連する問題