好吧,所以我正在尝试使用变量值,然后使用该变量的值来获取该变量的值。
因此,我的script
将$1
作为一条消息,然后将$2
作为打印出来的颜色。
#!/bin/bash
# TAKES $1 as MSG and $2 as COLOR.
export black='echo -e "\E[30;47m"'
export red='echo -e "\E[31;47m"'
export green='echo -e "\E[32;47m"'
export yellow='echo -e "\E[33;47m"'
export blue='echo -e "\E[34;47m"'
export magenta='echo -e "\E[35;47m"'
export cyan='echo -e "\E[36;47m"'
export white='echo -e "\E[37;47m"'
# VARIABLES
export color="$2" # Set Color
export message="$1" # Set MSG
# Use $color for what variable to substitute with, so we get the echos.
# Previously tried \$$color to get $whatever_$2_was but it wouldn't get the value.
\$$color
echo "$message" # Echo Message.
tput sgr0 # Reset to normal.
它被称为:
USAGE: cecho "MESSAGE" color
因此,基本上脚本指向的是用$message
等于$2
的颜色$2
。
Anyidea如何:
1。使用script
名称获取变量的值
或
2。更好的方式来撰写此{{1}}?
答案 0 :(得分:5)
查找间接(Shell Parameter Expansion的第四段):
${!color}
如果color=white
,这将生成来自$white
的字符串,我认为这就是你所追求的。您也可以查找eval
命令,但它通常不像${!color}
符号那样令人满意(比危险)。
关于编写脚本的更好方法:我会推迟echo -e
直到我使用颜色,除非你打算点(.
),否则我不会导出变量或source
剧本:
black='\E[30;47m'
...
white='\E[37;47m'
...
color="$2"
...
echo -e "${!color}"