에코로 반대 배경을 얻는 방법

에코로 반대 배경을 얻는 방법

모달을 사용하면 0다음과 같이 글꼴 색상과 배경색을 설정할 수 있습니다.

echo -e "\e[0;31;47m teststring \e[0m"

그런데 반대색을 배경색(제 생각에는 청록색)으로 사용하고 싶습니다. 그래서 저는 그 모드를 사용하고 싶습니다 7(모드는 7반대 배경을 갖게 됩니다). 하지만 항상 작동하는 것은 아닙니다.

누구든지 이 패턴을 사용하는 방법을 말해 줄 수 있나요?

답변1

\e[7m역방향 비디오에 대한 코드입니다(자주 사용되는 경우도 있음).눈에 띄다모드) 대부분의 터미널에서. 하지만 그것이 하는 일은 배경색을 전경색으로 바꾸고 전경색을 배경색으로 바꾸는 것입니다. 이는 사진 네거티브와 같은 역 비디오가 아닙니다.

사진 네거티브의 경우 일부 터미널은 다음을 지원합니다.

\e[38;2;RED;GREEN;BLUEm  # for foreground
\e[48;2;RED;GREEN;BLUEm  # for background

이스케이프 시퀀스입니다. 여기서 는 0에서 255까지의 십진수 입니다 RED. 이는 터미널이 RGB 사양에 가장 가까운 팔레트의 색상을 선택하도록 지시합니다.GREENBLUE

그래서 당신은 이것을 할 수 있습니다 :

straight_color() {
   printf '\33[48;2;%s;%s;%sm\33[38;2;%s;%s;%sm' "$@"
}
negative_color() {
  for c do
    set -- "$@" "$((255 - c))"
    shift
  done
  straightcolor "$@"
}

예를 들면 다음과 같습니다.

straight_color 255 0 0  255 255 255

밝은 빨간색 배경에 밝은 흰색 전경의 경우:

negative_color 255 0 0  255 255 255

음수입니다(밝은 청록색 바탕에 검정색).

답변2

위키페이지를 주의 깊게 읽어보세요ANSI 이스케이프 코드\e[46m; 등을 사용할 수 있습니다.

답변3

이 문제를 해결하는 가장 좋은 방법은 terminfo라이브러리를 사용하는 것입니다. 이는 이스케이프 코드를 기억하는 것보다 훨씬 쉽고 일반적으로 오류가 발생할 가능성이 적습니다. (또한 터미널 독립적이지만 요즘에는 ANSI가 아닌 터미널 장치를 사용하지 않을 것 같습니다.)

# Use reversed colours
tput smso
echo hello, world
tput rmso

아래와 같이 프로그래밍 방식으로 코드를 변수에 넣을 수도 있습니다.

smso=$(tput smso)
rmso=$(tput rmso)

echo "${smso}Hello again${rmso}"

색상 컨트롤, 사용 tput setf {colour}tput setb {colour}. ("색상 처리"를 검색하십시오 man terminfo.) 이것은 더 복잡하므로 작은 스크립트를 사용하여 처리하는 경향이 있습니다.

colour blue yellow
echo this is blue on yellow

이게 스크립트야

#!/bin/sh
#
# Take a pair of colours and set the foreground and background,
# respectively.
#
########################################################################
#
NULL=/dev/null

fg="$1"
bg="$2"


########################################################################
# Translate a colour name to the corresponding ANSI index value
#
colourNo ()
{
    case "$1" in
        black|0)        echo 0  ;;
        blue|1)         echo 1  ;;
        green|2)        echo 2  ;;
        cyan|3)         echo 3  ;;
        red|4)          echo 4  ;;
        magenta|5)      echo 5  ;;
        yellow|6)       echo 6  ;;
        white|7)        echo 7  ;;
    esac
    return
}


########################################################################
# Go
#
if test "X$1" = 'X-?'
then
    progname=`basename "$0"`
    echo "Usage:  $progname  [<fg_colour>|-  [bg_colour]]" >&2
    exit 1
fi

if test -n "$fg" -a "X$fg" != "X-"
then
    colour=`colourNo "$fg"`
    test -n "$colour" && tput setf "$colour"
fi

if test -n "$bg" -a "X$bg" != "X-"
then
    colour=`colourNo "$bg"`
    test -n "$colour" && tput setb "$colour"
fi

exit 0

관련 정보