使用Bash编写获取数组随机元素的函数

3

我知道如何从数组中获取一个随机项,就像这样:

declare -a ARRAYISO=(100 200 400 800)
echo ${ARRAYISO["$[RANDOM % ${#ARRAYISO[@]}]"]}

我显然可以为每个数组都这样做,像一头驴子一样,但我想创建一个函数,该函数以数组作为参数并返回一个随机元素。
我正在尝试使用以下代码:
randArrayElement() {
    randElement=${$1["$[RANDOM % ${#$1[@]}]"]} 
    echo  $randElement
}
randArrayElement ARRAYISO

但是它不喜欢我的$1...我尝试过使用",',`,但bash无法解释$1变量...
1个回答

5

将您的函数更改为:

randArrayElement(){ arr=("${!1}"); echo ${arr["$[RANDOM % ${#arr[@]}]"]}; }

然后将其称为:

randArrayElement "ARRAYISO[@]"

Anubhava,这个函数在我调用它时会在值后面添加一个 \n,我该如何去掉它?(我在另一个命令中使用这个输出,但由于这个问题它无法正常工作),谢谢! - matthieu matthieu
那是因为 echo 命令。使用 echo -n ${arr["$[RANDOM % ${#arr[@]}]"]}; - anubhava
当我尝试运行代码时,出现了错误 line 11: RANDOM % 0: division by 0 (error token is "0")。您能否详细说明一下如何使用这个函数? - Burak Kaymakci
请确保将数组传递给该函数。 - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接