使用变量的值来使用该变量值

时间:2013-08-29 00:43:58

标签: bash

好吧,所以我正在尝试使用变量值,然后使用该变量的值来获取该变量的值。

因此,我的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}}?

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}"