ユーザーに乱数の行と列数の入力を求められたら、乱数行列を作成しようとします。入れ子になった for ループのみ使用できます。
行と列の2つの変数を作成しましたが、主な問題はforループが正しくエコーされるようにすることです。これは私のループ機能です
for i in [1..$rows]; do
echo "$RANDOM";
done
私はiの値を1 + 1に増やそうとしましたが、ループは一度だけ実行されます。スクリプトが$ rowsの値を読み取るようにしたいと思います。
答え1
同様の構文はありません[x..y]
。{x..y}
と思うかもしれませんが、それはうまくいきませんifx
またはy
変数。
したがって、次のいずれかを試すことができます。
for ((i=1;i<=$rows;i++)); do
echo "$RANDOM"
done
または
for i in $(seq 1 "$rows"); do
echo "$RANDOM"
done
または
i=0
while (( ++i <= rows)); do
echo "$RANDOM";
done
でも
i=0
until [ $i -gt $rows ]; do
echo "$RANDOM"
((i++))
done
答え2
astden指摘、使用した構文が正しくありません。それから彼はループのいくつかの例を提示しました。会議働く
ただし、$rows
任意の整数を印刷するには、次のものを使用することもできます。
jot -r "$rows"
または等しく、
jot -r "$rows" 1 100
$rows
1から100までの任意の整数を出力します(jot
BSDシステムまたは一部のLinuxシステムのパッケージに含まれていますathena-jot
)。
または、
shuf -i 1-100 -r -n "$rows"
jot
上記のコマンドと同じことを行います(shuf
GNU coreutilsの一部です)。
$cols
タイムアイテムのマトリックスを作成するには、$rows
次のものを使用できますrs
(BSDシステムまたは一部のLinuxシステムのパッケージrs
で利用可能)。rs
$ rows=4
$ cols=6
$ jot -r "$(( rows * cols ))" | rs "$rows" "$cols"
37 29 2 74 5 14
82 86 74 63 73 9
58 10 14 96 12 90
98 13 55 56 40 52
$rows * $cols
乱数が必要であることに注意してください。ここで使用されている例では、これらの値を取得しますjot
(shuf
または数値を生成する他のコマンド)を使用することもできます。
答え3
そしてzsh
:
$ eval print -C4 '$(('{1..20}', RANDOM))'
11190 17138 16156 5735
16751 13545 22647 13244
12925 11584 10984 32387
32093 8170 5305 6102
25136 30299 3944 9956
または、GNUを使用してshuf
範囲を指定します。
$ print -C4 $(shuf -i 0-99 -n 20)
96 55 93 33
25 7 19 60
34 51 88 46
79 13 70 98
63 37 69 41