如何创建可变长度循环来打印随机数?

如何创建可变长度循环来打印随机数?

在提示用户输入随机数的行数和列数后,我试图创建一个随机数矩阵。我只能使用嵌套的 for 循环。

我创建了两个变量:行和列,但我的主要问题是让 for 循环正确回显。这是我的循环函数

    for i in [1..$rows]; do
    echo "$RANDOM";
    done

我尝试用 1+1 增加 i 的值,但不管它只运行一次循环。我希望脚本读取 $rows 的值。

答案1

没有类似的语法[x..y]。你可能在想{x..y},但是那行不通如果xy是变量。

因此,您可以尝试其中一种:

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

它将输出$rows1 到 100 之间的随机整数(jot包含在 BSD 系统上,或在athena-jot某些 Linux 系统上的包中)。

或者,

shuf -i 1-100 -r -n "$rows"

它的作用与jot上面的命令相同(shuf是 GNU coreutils 的一部分)。

$cols要创建时间条目矩阵$rows,您可以使用rsrs在 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

相关内容