如何编写不会在 bash 中重复的文本颜色随机化器?



我正试图编写一个愚蠢的程序,它可以在bash中不重复地随机化文本颜色,但我不知道如何做到。

#!/bin/bash
name=$1
number=$2
array1=()
for i in {1..$number}; do
random=$(($RANDOM % 6 + 31))
array1+=($random)
color="33[0;${random}m"
while["${array1[*]}" =~ "${color}"]; do
random=$(($RANDOM % 6 + 31))
array1[$i]="$random"
done
echo -e $color$name
done

如果您想用number不同的颜色打印name,您可以使用关联数组来确保每个随机颜色都是唯一的

#! /bin/bash
MAX=256
name="$1"
number="$(($2 > MAX ? MAX : $2))"
declare -A colors
while (( ${#colors[@]} < number)); do
color=$((RANDOM % MAX))
if [[ ! "${colors[$color]+?}" ]]; then
colors[$color]=1
printf '%s%s%sn' "$(tput setaf ${color})" "${name}" "$(tput sgr0)"
fi
done

我把最大值设置为256,但你可以使用任何数字。此外,它使用tput而不是硬编码转义序列。

最新更新