1

我正在尝试使用我在网上找到的代码生成随机日期时间。此代码使用了 $RANDOM。奇怪的是,我可以继续执行脚本,但日期时间结果永远不会改变。但是当我添加“echo $Random”时,日期时间结果会发生变化。它与随机变量的播种和执行“回声”以某种方式重置它有关吗?

#echo $RANDOM // This causes desire output
x=$(date -d "$((RANDOM%1+2010))-$((RANDOM%12+1))-$((RANDOM%28+1)) $((RANDOM%23+1)):$((RANDOM%59+1)):$((RANDOM%59+1))" '+%d-%m-%Y %H:%M:%S')
echo $x

输出

INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test
4

1 回答 1

1

有关播种和效果问题的答案echo,请参阅高级 Bash 脚本指南中的$RANDOM:生成随机整数。简而言之,该值(应该是)在每次 Bash 运行时自动播种为随机值,但如果您需要让它多次生成相同的数字序列,可以通过将其设置为常数值来重新播种。运行不会重新播种,但如果它已经播种,它将导致它移动到下一个“随机”值。$RANDOMecho $RANDOM$RANDOM

据我所知,Babun 只是带有一些附加工具和配置的 Cygwin。我没有看到任何类似 OP 使用 Cygwin Bash 报告的问题。假设 OP 正在运行 Bash(而不是 Zsh,Babun 似乎也提供了),问题的最可能原因是某些东西正在重新$RANDOM设置为恒定值。我建议仔细检查代码以确保没有分配给RANDOM. 一旦排除了这一点,下一个明显的嫌疑人就是 Bash 的 Babun 启动文件之一,因为它声称可以进行 shell 自定义。

如果RANDOM无法识别或修复任何正在重新播种的内容,那么想到的唯一选择就是在代码中明确地将其重新播种为合理随机的内容。上面引用的文章建议

RANDOM=$$

这非常弱,但在这种情况下可能已经足够好了。如果不是,上面引用的文章中还有其他建议(例如,涉及/dev/urandom)。另请参阅为什么 Bash 的 $RANDOM 没有在某些机器上播种(?)?, Unix $RANDOM 函数在 Bash 终端中不是随机的,并且$RANDOM 在 linux bash 中在启动时总是相同的

于 2018-10-03T20:05:41.960 回答