【问题标题】:bash shell pull all values from array in random order. Pull each value only oncebash shell 以随机顺序从数组中提取所有值。每个值只拉一次
【发布时间】:2021-03-09 21:42:24
【问题描述】:

我需要以随机顺序从数组中提取值。它不应该两次提取相同的值。

R=$(($RANDOM%5))
mixarray=("I" "like" "to" "play" "games")
echo ${mixarray[$R]}

我不确定在上面的代码之后该怎么做。我想把第一个拉取的值放到另一个数组中,然后将它全部嵌套在一个循环中,检查第二个数组,这样它就不会从第一个数组中两次拉取相同的值。经过多次尝试,我就是无法正确使用语法。

输出应该是这样的: 到 喜欢 一世 玩 游戏

谢谢,

【问题讨论】:

标签: arrays bash loops random


【解决方案1】:

请您尝试以下方法:

#!/bin/bash

mixarray=("I" "like" "to" "play" "games")
mapfile -t result < <(for (( i = 0; i < ${#mixarray[@]}; i++ )); do
    echo -e "${RANDOM}\t${i}"
done | sort -nk1,1 | cut -f2 | while IFS= read -r n; do
    echo "${mixarray[$n]}"
done)
echo "${result[*]}"
  • 首先,它并排打印一个随机数和一个从 0 开始的索引。
  • 上面的过程会重复mixarray的长度。
  • 输出将如下所示:
13959   0
6416    1
6038    2
492     3
19893   4
  • 然后表格按照第一个字段排序:
492     3
6038    2
6416    1
13959   0
19893   4
  • 现在第二个字段中的索引是随机的。该字段是用 cut 命令。
  • 接下来使用随机索引重新排列 mixarray 的元素。
  • 最后将输出分配给数组result 并打印出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2015-10-02
    • 2023-03-25
    相关资源
    最近更新 更多