这很不言自明,但$RANDOM变量只有在输出未通过管道传输时才会更改.这是zsh中的一个错误,还是我在某个地方缺乏理解的结果?以下是我的命令的结果:

┌──(root㉿linux)-[~/scripts]
└─# echo $RANDOM                             
14103
                                                                                                                                                                      
┌──(root㉿linux)-[~/scripts]
└─# echo $RANDOM
30417
                                                                                                                                                                      
┌──(root㉿linux)-[~/scripts]
└─# echo $RANDOM
3090
                                                                                                                                                                      
┌──(root㉿linux)-[~/scripts]
└─# echo $RANDOM | md5sum | head -c 20
af5655b26ab87e81ef4f
                                                                                                                                                                      
┌──(root㉿linux)-[~/scripts]
└─# echo $RANDOM | md5sum | head -c 20
af5655b26ab87e81ef4f
                                                                                                                                                                      
┌──(root㉿linux)-[~/scripts]
└─# echo $RANDOM | md5sum | head -c 20
af5655b26ab87e81ef4f

为什么会发生这种事?Bash中的相同脚本似乎也奏效了.

推荐答案

这是zsh中的预期行为.看这个mailing list archive

来自zshparam的:

RANDOM
A pseudo-random integer from 0 to 32767, newly generated each time this parameter is referenced. The random number generator can be seeded by assigning a numeric value to RANDOM.

随机数的值形成故意可重复的伪随机数 序列;引用随机意志的子壳 的父shell 中引用或设定种子的值,否则会产生相同的伪随机值 在子shell 调用之间.

只需在PIPED命令之前再次访问$RANDOM即可解决此问题.

$ echo $RANDOM | cat
27008
$ echo $RANDOM | cat
27008
$ temp=$RANDOM
$ echo $RANDOM | cat
30572

Linux相关问答推荐

一个bash脚本,用于基于2列映射文件替换多个文件名中的模式

为什么在Linux上STD::SLEEP_FOR(STD::Chrono::Hors::Max())会立即返回?

通过shell 脚本基于AM/PM对日期时间字段进行排序

在Groff mm中定义页眉不会更改第一页中的页眉

变量在vim中打印良好,但在bashshell中打印不好,这怎么可能发生?

在查找命令中使用 printf

awk 使用动态列号

c++进程状态中的+是什么意思

为什么`__vfprintf_internal`(`stdio.h`中的`printfn`)强制`$rbp`在我的x86-64机器上向前跳转6313864字节?

如何恢复已停止的进程?

访问证书里面的图片

如何有效地使用 grep?

安装 mod_ssl 亚马逊 Linux

Linux AMD64 中如何使用 fs/gs 寄存器?

如何在 Linux 上查找不包含文本的文本文件?

在 bash 中将输出作为 cp 的参数传递

解压tar tar.bz2 文件报错

ctrl-x 在终端中使用时会发送哪个信号?

在 Linux 上更新 PyCharm

构建窗口管理器