我有一个从数组中选择随机对象的函数。我已经包装了内部的 bash 函数 RANDOM ,并实现了我的功能:
function rand() { echo $[ $RANDOM % $2 + $1 ]; }
function rand_obj() { objs=($@); index=$(rand 0 $#); echo ${objs[$index]} ; }
它工作正常,但我很想学习一种在没有中间数组 objs 的情况下实现它的方法。有任何想法吗? 提前致谢
答案 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}