Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Bash脚本中随机选择并打印三个字符串中的一个_Bash_Shell_Random - Fatal编程技术网

在Bash脚本中随机选择并打印三个字符串中的一个

在Bash脚本中随机选择并打印三个字符串中的一个,bash,shell,random,Bash,Shell,Random,如何打印值,1、2或3(随机)。我最好的猜测失败了: #!/bin/bash 1 = "2 million" 2 = "1 million" 3 = "3 million" print randomint(1,2,3) 要使用bash生成随机数,请使用$random内部bash函数: arr[0]="2 million" arr[1]="1 million" arr[2]="3 million" rand=$[ $RANDOM % 3 ] echo ${arr[$rand]} 从bas

如何打印值,1、2或3(随机)。我最好的猜测失败了:

#!/bin/bash

1 = "2 million"
2 = "1 million"
3 = "3 million"

print randomint(1,2,3)

要使用bash生成随机数,请使用
$random
内部bash函数:

arr[0]="2 million"
arr[1]="1 million"
arr[2]="3 million"

rand=$[ $RANDOM % 3 ]
echo ${arr[$rand]}
从bash手册中随机选择:

每次启用此参数时 引用,0之间的随机整数 生成了32767。序列 一组随机数可以初始化 通过将值赋给“随机”。如果 “随机”是未设置的,它失去了它的属性 特殊属性,即使是 随后重置


64个字符的字母数字字符串

randomString32() {
    index=0
    str=""

    for i in {a..z}; do arr[index]=$i; index=`expr ${index} + 1`; done
    for i in {A..Z}; do arr[index]=$i; index=`expr ${index} + 1`; done
    for i in {0..9}; do arr[index]=$i; index=`expr ${index} + 1`; done
    for i in {1..64}; do str="$str${arr[$RANDOM%$index]}"; done

    echo $str
}

Coreutils
shuf

如中所示,如果字符串不包含换行符,则此函数可以正常工作

例如,从
a
b
c
中随机选取一个字母:

printf 'a\nb\nc\n' | shuf -n1
POSIX评估阵列仿真+随机

修改Marty的
eval
技术以模拟阵列(非POSIX):

这仍然使
随机
非POSIX


awk
rand()
是一种POSIX方法来解决这个问题。

想使用nice
-n1-e
方法从coreutils使用
shuf
来证实这一点

~.$ set -- "First Expression" Second "and Last"
~.$ eval echo \$$(expr $RANDOM % 3 + 1)
and Last
~.$ 
示例用法,用于在值
a
b
c
中随机选取:

printf 'a\nb\nc\n' | shuf -n1
CHOICE=$(shuf-n1-eabbc)
回声“选择:$choice”
我查看了两种样品尺寸(1000和10000)的天平:


Ref:

最小的问题是:从
{1,2,3}
+数组中选择一个整数来解决这个问题。那些
1=“200万”
行应该是什么意思?它们不是有效的bash构造。我相信这并不能回答问题:OP希望从3个字符串中选择一个,而不是生成一个完全随机的字符串。而
/dev/random
更适合这样做;linux?我在MacOSX上看不到它,而且阵列非常难看。见下文answer@MartyMcGowanGNU非POSIX作为链接。同意数组是丑陋的,但shuf的第一个选项不使用数组。同意更大的可移植性是很酷的。我不知道
set
可以像你建议的那样设置参数,这很有趣。
$[]
是一个支持1970年代伯恩语法的兼容性构造;这种构造在最新的标准中找不到,因此不能保证由除bash(历史上包括它)之外的更现代的shell支持。自1991年POSIX sh发布以来,标准化的数学结构一直是
$(())
,因此这应该是
rand=$((随机%3))
。我还建议引用--
echo“${arr[$rand]}”
;这样,我们就不会在IFS中使用不同的值,或者使用扩展为全局的数组值时出现意外行为。(例如,如果
IFS=0123456789
,那么没有引号的
echo${arr[$rand}
根本不会打印任何数字)。为了避免硬编码3,rand=$[$RANDOM%${arr[@]}如何?
$ for lol in $(seq 1000); do shuf -n1 -e a b c; done > shufdata
$ less shufdata | sort | uniq -c
    350 a
    316 b
    334 c
$ for lol in $(seq 10000); do shuf -n1 -e a b c; done > shufdata
$ less shufdata | sort | uniq -c
   3315 a
   3377 b
   3308 c