Случайные аргументы (содержащие цветовые коды) из массива

У меня есть массив (показано ниже) с аргументами, которые содержат цветовые коды.

Цель моего сценария – рандомизировать эти аргументы, когда пользователь вводит

scriptname randoms Text 

так что каждый раз он будет отображать Text на экране другого цвета.

Ниже я написал некоторые утверждения if, не связанные с этой конкретной проблемой, они работают, когда я их тестировал. Проблема, которую я имею, заключается в рандомизации цветов, когда пользователь вводит

 scriptname randoms Text 

Вот сценарий:

 #!\bin\bash declare -A colours=( [black]="0;30" [red]="0;31" [green]="0;32" [yellow]="0;33" [blue]="0;34" [magenta]="0;35" [cyan]="0;36" [white]="0;37" [BLACK]="1;30" [RED]="1;31" [GREEN]="1;32" [YELLOW]="1;33" [BLUE]="1;34" [MAGENTA]="1;35" [CYAN]="1;36" [WHITE]="1;37" [bLaCk]="0;30" [rEd]="0;31" [gReEn]="0;32" [yElLoW]="0;33" [bLuE]="0;34" [mAgEnTa]="0;35" [cYaN]="0;36" [wHiTe]="0;37" [BlAcK]="1;30" [ReD]="1;31" [GrEeN]="1;32" [YeLlOW]="1;33" [BlUe]="1;34" [MaGeNtA]="1;35" [CyAn]="1;36" [WhItE]="1;37") if [ $# -lt 2 ]; then echo Usage: echoc COLOUR STRING exit 1 fi regex='^black$|^red$|^green$|^yellow$|^blue$|^magenta$|^cyan$|^white$' randoms=$(( $RANDOM % $regex )); echo $randoms shopt -s nocasematch if [[ $1 =~ $randoms ]] ; then echo -ne '\e['${colours[$randoms]}m shift echo -e $*'\e[0m' exit 2 fi 

2 Solutions collect form web for “Случайные аргументы (содержащие цветовые коды) из массива”

Я не совсем понимаю, как вы хотите, чтобы ваш скрипт работал. Я немного переписал его: распечатайте все аргументы командной строки, каждая буква в случайном цвете:

 #!/bin/bash # [black]=30 # [red]=31 # [green]=32 # [yellow]=33 # [blue]=34 # [magenta]=35 # [cyan]=36 # [white]=37 function random_colour { local bold=$(( $RANDOM % 2 )) local code=$(( 30 + $RANDOM % 8 )) printf "%d;%d\n" $bold $code } sentence="$*" for (( i=0; i<${#sentence}; i++ )); do printf "\e[%sm%c" "$(random_colour)" "${sentence:i:1}" done echo -e '\e[0m' 

С zsh :

 zmodload zsh/terminfo text='some text' b=(%B '') print -rP -- ${text//(#m)?/%F{$((RANDOM%terminfo[colors]))}$b[RANDOM%2+1]${MATCH//\%/%%}}%b%f 
  • В чем разница между печатью и головой?
  • дождитесь завершения подключения autossh
  • Улучшение скорости выполнения сценария яркости экрана
  • Массовое создание файлов с bash
  • «History» перестает работать при запуске внутри сценария bash
  • Как разрешить сценарию оболочки bash цикл для 3 повторений перед выходом (подсказка для имени пользователя / пароля)
  • прямое выполнение скриптов python
  • verify: команда не найдена исключение при попытке получить значение от пользователя
  • Как заставить команду diff игнорировать некоторые строки второго файла (bash)?
  • Как заставить sed выполнять действия только в первом матче?
  • Что такое эквивалент Fedora /var/lib/dpkg/info/.prerm?
  • Linux и Unix - лучшая ОС в мире.