23

在我的 bash 脚本中,我有两个变量CONFIG_OPTIONCONFIG_VALUE它们分别包含字符串VENDOR_NAMEDefault_Vendor

我需要创建一个名为$CONFIG_OPTIONie的变量VENDOR_NAME并将值分配CONFIG_VALUE给新创建的变量。

我怎么能做到这一点?

我试过

$CONFIG_OPTION=$CONFIG_VALUE

但是我在这条线上遇到了一个错误

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

谢谢。

4

3 回答 3

40

我知道没有人会提到它,所以我走了。你可以用printf

#!/bin/bash

CONFIG_OPTION="VENDOR_NAME"
CONFIG_VALUE="Default_Vendor"

printf -v "$CONFIG_OPTION" "%s" "$CONFIG_VALUE"

# Don't believe me?
echo "$VENDOR_NAME"
于 2012-12-05T06:49:19.267 回答
20

这使用 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
于 2014-10-25T02:38:21.727 回答
3

对于纯外壳,可能尝试:

#!/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 选项吗?

于 2018-05-08T11:15:58.873 回答