在提示用户输入随机数的行数和列数后,我试图创建一个随机数矩阵。我只能使用嵌套的 for 循环。
我创建了两个变量:行和列,但我的主要问题是让 for 循环正确回显。这是我的循环函数
for i in [1..$rows]; do
echo "$RANDOM";
done
我尝试用 1+1 增加 i 的值,但不管它只运行一次循环。我希望脚本读取 $rows 的值。
答案1
没有类似的语法[x..y]
。你可能在想{x..y}
,但是那行不通如果x
或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
阿斯特登指出,你使用的语法不正确,他接着给出了一些循环的例子会工作。
但是,要打印$rows
随机整数的数量,您也可以使用
jot -r "$rows"
或者,等价地,
jot -r "$rows" 1 100
它将输出$rows
1 到 100 之间的随机整数(jot
包含在 BSD 系统上,或在athena-jot
某些 Linux 系统上的包中)。
或者,
shuf -i 1-100 -r -n "$rows"
它的作用与jot
上面的命令相同(shuf
是 GNU coreutils 的一部分)。
$cols
要创建时间条目矩阵$rows
,您可以使用rs
(rs
在 BSD 系统上可用,或在rs
某些 Linux 系统上的软件包中可用):
$ 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
或者使用 GNUshuf
指定范围:
$ 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