从另一个字符串的值创建字符串变量名称

时间:2012-12-05 04:59:41

标签: bash unix

在我的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'

感谢。

3 个答案:

答案 0 :(得分:33)

我知道没有人会提到它,所以我走了。您可以使用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方法一样快)。

答案 1 :(得分:13)

这使用bash builtins:

#!/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

答案 2 :(得分:1)

对于纯shell,可以尝试:

#!/usr/bin/env sh

option=vendor_name
value="my vendor"

eval $option="'$value'" # be careful with ', \n, and \ in value
eval echo "\$$option" # my vendor
echo "$vendor_name" # my vendor

为什么?

#!/usr/bin/env sh
printf -v "var" "val" # prints the flag, var not set
declare var=val # sh: declare: not found
echo ${!var} # sh: syntax error: bad substitution

我不喜欢eval,但是有没有POSIX选项?