Bash 从列表中选择随机字符串

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/35623462/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-18 14:18:39  来源:igfitidea点击:

Bash select random string from list

stringbashlistrandom

提问by Amr Elhosiny

I have a list of strings that I want to select one of them at random each time I launch the script.

我有一个字符串列表,我想在每次启动脚本时随机选择其中一个。

For example

例如

SDF_BCH_CB="file1.sdf"
SDF_BCH_CW="file2.sdf"
SDF_BCH_RCB="file3.sdf"
SDF_BCH_RCW="file4.sdf"
SDF_TT="file5.sdf"

Then I want to be randomly select from the above list to assign the following two variables.

然后我想从上面的列表中随机选择分配以下两个变量。

SDFFILE_MIN=$SDF_BCH_CW
SDFFILE_MAX=$SDF_TT

How can I do this ?

我怎样才能做到这一点 ?

Thanks

谢谢

回答by Benjamin

Store in array, count and random select:

存储在数组中,计数和随机选择:

#!/bin/bash
array[0]="file1.sdf"
array[1]="file2.sdf"
array[2]="file3.sdf"
array[3]="file4.sdf"

size=${#array[@]}
index=$(($RANDOM % $size))
echo ${array[$index]}

回答by Wolf

Use the built in $RANDOM function and arrays.

使用内置的 $RANDOM 函数和数组。

DF_BCH_CB="file1.sdf"
SDF_BCH_CW="file2.sdf"
SDF_BCH_RCB="file3.sdf"
SDF_BCH_RCW="file4.sdf"
SDF_TT="file5.sdf"

ARRAY=($DF_BCH_CB $SDF_BCH_CW $SDF_BCH_RCB $SDF_BCH_RCW $SDF_TT)
INDEX=(0 1 2 3 4)
N1=$((RANDOM % 5))
SDFFILE_MIN=${ARRAY[$N1]}
N2=$((RANDOM % 4))
if [ "$N2" = "$N1" ] ; then
    N2=$N1+1
fi
SDFFILE_MAX=${ARRAY[$N2]}

echo $SDFFILE_MIN
echo $SDFFILE_MAX

This gets two different strings for SDFFILE_MIN and SDFFILE_MAX. If they don't have to be different, remove the if statement in the middle.

这会为 SDFFILE_MIN 和 SDFFILE_MAX 获取两个不同的字符串。如果它们不必不同,请删除中间的 if 语句。