bash - 从数组中选择随机对象

时间:2015-06-21 14:04:52

标签: arrays bash random

我有一个从数组中选择随机对象的函数。我已经包装了内部的 bash 函数 RANDOM ,并实现了我的功能:

function rand() { echo $[ $RANDOM % $2 + $1 ]; }
function rand_obj() { objs=($@); index=$(rand 0 $#); echo ${objs[$index]} ; }

它工作正常,但我很想学习一种在没有中间数组 objs 的情况下实现它的方法。有任何想法吗? 提前致谢

2 个答案:

答案 0 :(得分:2)

方法太多了。这里几乎是oneliner,但假设你的字符串中没有空格,你从未接触过IFS:

echo ${ARRAY[@]} | tr ' ' '\n' | shuf -n1

答案 1 :(得分:2)

有这样的事吗

rand_obj() {
    shift $(( $(rand 1 $#) - 1 )); echo "$1"
}

做你想做的事吗?

以上结束带换行符的参数存在问题。

命令替换总是删除尾随换行符。

要处理这种情况,你需要坚持使用虚拟角色等。最后在使用时将其删除。像这样:

rand_obj() {
    shift $(( $(rand 1 $#) - 1 )); echo "$1x"
}
elem=$(rand_obj ... ... ... ... ...)
elem=${elem%x}