【发布时间】:2014-06-05 01:08:30
【问题描述】:
这是一种我无法解释的奇怪行为。我想用 shell 生成一个可预测的随机数序列。我将 $RANDOM 与种子一起使用。这是一个测试程序。
RANDOM=15
echo $RANDOM
每次运行时都给出相同的数字,这可以正常工作。但是如果我在这个程序中添加一个管道,它每次都会给出不同的结果。试试下面的简化程序。
RANDOM=15
echo $RANDOM | cat
我找到了 2 个问题的解决方法(使其可预测),但仍然无法解释原因。
修复 1
RANDOM=15
x=$RANDOM
echo $x | cat
修复 2
(RANDOM=15
echo $RANDOM) | cat
我在 Linux 和 Mac 上试过。行为是一致的。谁能解释一下?
【问题讨论】:
-
仅供参考 --
RANDOM不是 POSIX sh 基线 shell 语言的一部分,而是 bash(可能还有其他现代 ksh 衍生产品)中可用的扩展。因此,这可能应该被标记为bash,而不是shell,并且您应该避免在以#!/bin/sh开头的脚本中使用RANDOM,因为它不能保证与所有/bin/sh解释器一起使用。
标签: bash shell random pipe seed