Bash:带变量的彩色输出

der*_*erp 16 variables bash

我有以下功能:

function pause #for prompted pause until ENTER
{


prompt="$3"
    echo -e -n "\E[36m$3" #color output text cyan
    echo -e -n '\E[0m' #ends colored output
    read -p "$*"  #read keys from user until ENTER.
    clear

}

pause "Press enter to continue..."
Run Code Online (Sandbox Code Playgroud)

但是,我的函数拒绝将青色应用于我传递给函数的字符串.

这里也提出类似的问题,但似乎我正在做的一切......

dsc*_*ulz 26

试试这个:

RESTORE='\033[0m'

RED='\033[00;31m'
GREEN='\033[00;32m'
YELLOW='\033[00;33m'
BLUE='\033[00;34m'
PURPLE='\033[00;35m'
CYAN='\033[00;36m'
LIGHTGRAY='\033[00;37m'

LRED='\033[01;31m'
LGREEN='\033[01;32m'
LYELLOW='\033[01;33m'
LBLUE='\033[01;34m'
LPURPLE='\033[01;35m'
LCYAN='\033[01;36m'
WHITE='\033[01;37m'

function test_colors(){

  echo -e "${GREEN}Hello ${CYAN}THERE${RESTORE} Restored here ${LCYAN}HELLO again ${RED} Red socks aren't sexy ${BLUE} neither are blue ${RESTORE} "

}

function pause(){
  echo -en "${CYAN}"
  read -p "[Paused]  $*" FOO_discarded
  echo -en "${RESTORE}"
}


test_colors
pause "Hit any key to continue"
Run Code Online (Sandbox Code Playgroud)

背景更有趣

echo -e "\033[01;41;35mTRY THIS\033[0m"
echo -e "\033[02;44;35mAND THIS\033[0m"
echo -e "\033[03;42;31mAND THIS\033[0m"
echo -e "\033[04;44;33mAND THIS\033[0m"
echo -e "\033[05;44;33mAND THIS\033[0m"
Run Code Online (Sandbox Code Playgroud)


mar*_*log 13

我稍微修改了你的代码:

#!/bin/bash

function pause() {
    prompt="$1"
    echo -e -n "\033[1;36m$prompt"
    echo -e -n '\033[0m'
    read
    clear
}

pause "Press enter to continue..."
Run Code Online (Sandbox Code Playgroud)

我改变了什么:

  1. 当正确的参数为$ 1时,您正在将提示符初始化为$ 3
  2. ANSI序列不正确.请参阅:http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html
  3. 对read的调用是不正确的,你传递了几个参数来使用$*.在这种特殊情况下,您将丢弃输入,因此甚至不需要保存读取结果.我建议你阅读手册页:http://linux.die.net/man/1/bash,看看如何正确使用read.如果传入多个参数,那么这些参数将映射到包含行中输入的不同字段的变量名.


小智 11

为了节省其他时间:

https://gist.github.com/elucify/c7ccfee9f13b42f11f81

不需要$(echo -ne)到处都是,因为上面的要点中定义的变量已经包含控制字符.前导/尾随\001\002告诉bash控制字符不应占用空间,否则使用这些$PS1将会混淆readline.

RESTORE=$(echo -en '\001\033[0m\002')
RED=$(echo -en '\001\033[00;31m\002')
GREEN=$(echo -en '\001\033[00;32m\002')
YELLOW=$(echo -en '\001\033[00;33m\002')
BLUE=$(echo -en '\001\033[00;34m\002')
MAGENTA=$(echo -en '\001\033[00;35m\002')
PURPLE=$(echo -en '\001\033[00;35m\002')
CYAN=$(echo -en '\001\033[00;36m\002')
LIGHTGRAY=$(echo -en '\001\033[00;37m\002')
LRED=$(echo -en '\001\033[01;31m\002')
LGREEN=$(echo -en '\001\033[01;32m\002')
LYELLOW=$(echo -en '\001\033[01;33m\002')
LBLUE=$(echo -en '\001\033[01;34m\002')
LMAGENTA=$(echo -en '\001\033[01;35m\002')
LPURPLE=$(echo -en '\001\033[01;35m\002')
LCYAN=$(echo -en '\001\033[01;36m\002')
WHITE=$(echo -en '\001\033[01;37m\002')

# Test
echo ${RED}RED${GREEN}GREEN${YELLOW}YELLOW${BLUE}BLUE${PURPLE}PURPLE${CYAN}CYAN${WHITE}WHITE${RESTORE} 
Run Code Online (Sandbox Code Playgroud)