2012-12-05 274 views
16

在我的bash脚本中,我有两个变量CONFIG_OPTIONCONFIG_VALUE,分别包含字符串VENDOR_NAMEDefault_Vendor从另一个字符串的值创建字符串变量名称

我需要创建一个名称为$CONFIG_OPTION的变量,即VENDOR_NAME,并将CONFIG_VALUE中的值赋给新创建的变量。

我该怎么做?

我试图

$CONFIG_OPTION=$CONFIG_VALUE 

但我在这条线得到一个错误,因为

'./Build.bash: line 137: VENDOR_NAME="Default_Vendor": command not found' 

感谢。

+1

虽然这个问题并没有以完全相同的方式提出,但有多个答案,例如:http://stackoverflow.com/a/7776409/27862 – user123444555621

回答

25

我知道没有人会提及它,所以我在这里。你可以使用printf

#!/bin/bash 

CONFIG_OPTION="VENDOR_NAME" 
CONFIG_VALUE="Default_Vendor" 

printf -v $CONFIG_OPTION "$CONFIG_VALUE" 

# Don't believe me? 
echo "$VENDOR_NAME" 

完成!顺便说一句,这是一个相当快的方法(和declare方法一样快)。

+0

非常感谢你的一个相当令人惊讶的... [可悲的是,我不明白这是如何工作] :) – NeonGlow

+0

你可以阅读'help printf'。 'printf'的'-v'选项意味着它应该将变形后的字符串赋值给变量,该变量的名称紧跟'-v'选项。 –

+1

至少在某些外壳(例如灰壳)中看起来不起作用。 (虽然问题是专门针对Bash的,所以这不是什么大问题。) – hayavuk

8

它使用bash的内置命令:

#!/bin/bash 

VAR1="VAR2" 

declare "${VAR1}"="value" 

echo "VAR1=${VAR1}" 
echo "VAR2=${VAR2}" 

脚本输出:

VAR1=VAR2 
VAR2=value 

下面是使用你的变量名的片段:

#!/bin/bash 

CONFIG_OPTION="VENDOR_NAME" 

declare "${CONFIG_OPTION}"="value" 

echo "CONFIG_OPTION=${CONFIG_OPTION}" 
echo "VENDOR_NAME=${VENDOR_NAME}" 

脚本输出:

CONFIG_OPTION=VENDOR_NAME 
VENDOR_NAME=value 
+0

我发现'declare'语法比使用'printf'更容易阅读 –

相关问题