gpt4 book ai didi

bash - 为什么管道 $RANDOM 的输出会影响值?

转载 作者:行者123 更新时间:2023-11-29 09:12:36 24 4
gpt4 key购买 nike

下面是我希望生成同一对数字三次的脚本:

#! /usr/bin/env bash
RANDOM=5
echo " first" $RANDOM
echo "second" $RANDOM

echo

RANDOM=5
echo " first" $RANDOM
echo "second" $RANDOM

echo

RANDOM=5
echo "??????" $RANDOM | cat
echo " first" $RANDOM

相反,通过管道输出会阻止随机种子得到尊重。为什么?

 first 18499
second 9909

first 18499
second 9909

?????? 843
first 18499

最终,我希望能够做这样的事情:

#! /usr/bin/env bash
n=3
for i in $( seq $n) ; do
RANDOM=5
echo $RANDOM | md5sum | cut -d' ' -f1
done

我可以对后一个脚本进行哪些修改,以便每次运行时输出都相同?

最佳答案

管道中的命令在子shell中执行,子shell有自己独立的环境变量。 $RANDOM在管道中更新并且此更新不会传播到父 shell,这就是您看到 18499 的原因来自以下echo .

在这种情况下,您可以使用 <<< 来避免管道重定向。重定向不会创建子进程。

cat <<< "?????? $RANDOM"

(md5sum | cut -d' ' -f1) <<< "$RANDOM"

关于bash - 为什么管道 $RANDOM 的输出会影响值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51181818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com