색상 코드가 포함된 매개변수가 포함된 배열(아래 참조)이 있습니다.
내 스크립트의 의도된 목적은 사용자가 입력할 때 이러한 매개변수를 무작위로 지정하는 것입니다.
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
답변1
스크립트가 어떻게 작동하기를 원하는지 잘 모르겠습니다. 나는 그것을 조금 다시 작성했습니다. 각 문자를 임의의 색상으로 사용하여 모든 명령줄 인수를 인쇄합니다.
#!/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'
답변2
그리고 zsh
:
zmodload zsh/terminfo
text='some text'
b=(%B '')
print -rP -- ${text//(#m)?/%F{$((RANDOM%terminfo[colors]))}$b[RANDOM%2+1]${MATCH//\%/%%}}%b%f