dポイントプレゼントキャンペーン実施中!

#!/bin/bash

(1)BAR = `awk ' { printf("%d", srand()%10) }'`
(2)BAR = `awk '{ print srand()%10 }'`
(3)BAR = `awk '{ print int(10.0*rand()) }'`

echo "$BAR"

上記のように変数にランダム関数を代入したいのですが、うまくいきません。

awk '{ print int(10*rand()) }'

だけでうってみると、




………

のように、延々と続いてしまい、一回で終わらないのがとても気になります。

awk ' function hoge(n){ return 1 + int(rand()*n) } { print hoge(10) } '

のように、関数をからませてもうまくいきません。

どうか、解説をお願いします。

なお、OSはLINUXのFedora10で、Tera Termを使ってクライアントから操作しています。

A 回答 (3件)

> もしよければ、 [ ] はどういうときに使用するものか(if文のカッコなのかなど)、 $2つの意味をご教授願えないでしょうか。



$RANDOMは,乱数を返します。
$RANDOM % 10は,$RANDOMを10で割った余りを返す式です。
$[$RANDOM % 10]は,$RANDOMを10で割った余りを返す式を評価してその値を返します。式を$[と]で囲むわけですが,$((と))で囲むのが普通のシェルのやり方ですが,bashの場合には$[と]も使えるのです。
他には`expr $RANDOM % 10`というやり方もありますね。

間違っていたらご指摘ください。>識者の方

この回答への補足

$(($RANDOM % 10)) と `expr $RANDOM % 10` でともに正常に動くことを確認しました。
今回は大変お世話になりました。

補足日時:2009/12/03 16:30
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。本日体調不良で休んでいるため、復帰次第試してみます。

お礼日時:2009/12/01 07:19

その「わからない点」は bash のマニュアルを読めば解決するかも.

この回答への補足

RANDOMに関して、発見しました

>>RANDOM このパラメータが参照される度に、 0 から 32767 までのランダムな整数が生成されます。 RANDOM に値を代入すると、乱数の列を初期化できます。 RANDOM を unset すると、この変数の特殊な性質は無くなります。後で再び set しても元には戻りません。

ブランケット([])と前方の$は、説明文がかなり長くてみつけられませんでした。
man bash [ ] では、でてこないみたいですね。

補足日時:2009/11/25 16:29
    • good
    • 0

やりたいことは,もしかしてこういうこと?


echo $[$RANDOM % 10]

この回答への補足

もしよければ、 [ ] はどういうときに使用するものか(if文のカッコなのかなど)、 $2つの意味をご教授願えないでしょうか。

補足日時:2009/11/30 09:57
    • good
    • 0
この回答へのお礼

素晴らしい。大文字のRANDOM,この場合の2つの$、ブランケットなどわからない点はありますが、おかげさまで午前中悩んでいてた分が解決しました。本当にありがとうございます。

お礼日時:2009/11/25 14:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!