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

Neo*_*low 20 unix bash

在我的bash脚本我有两个变量CONFIG_OPTION,并CONFIG_VALUE包含字符串VENDOR_NAMEDefault_Vendor分别.

我需要创建一个名为$CONFIG_OPTIONie 的变量,VENDOR_NAME并将值赋给CONFIG_VALUE新创建的变量.

我怎么能这样做?

我试过了

$CONFIG_OPTION=$CONFIG_VALUE
Run Code Online (Sandbox Code Playgroud)

但我在这一行上收到错误

'./Build.bash: line 137: VENDOR_NAME="Default_Vendor": command not found'
Run Code Online (Sandbox Code Playgroud)

谢谢.

gni*_*urf 34

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

#!/bin/bash

CONFIG_OPTION="VENDOR_NAME"
CONFIG_VALUE="Default_Vendor"

printf -v $CONFIG_OPTION "$CONFIG_VALUE"

# Don't believe me?
echo "$VENDOR_NAME"
Run Code Online (Sandbox Code Playgroud)

完成!

顺便说一句,这是一种相当快速的方法(与declare方法一样快).

  • 这似乎不适用于至少一些壳(例如,灰壳).(虽然问题是针对Bash的,所以这不是什么大问题.) (3认同)

Kou*_*sha 13

这使用bash内置:

#!/bin/bash

VAR1="VAR2"

declare "${VAR1}"="value"

echo "VAR1=${VAR1}"
echo "VAR2=${VAR2}"
Run Code Online (Sandbox Code Playgroud)

脚本输出:

VAR1=VAR2
VAR2=value
Run Code Online (Sandbox Code Playgroud)

这是使用变量名称的代码段:

#!/bin/bash

CONFIG_OPTION="VENDOR_NAME"

declare "${CONFIG_OPTION}"="value"

echo "CONFIG_OPTION=${CONFIG_OPTION}"
echo "VENDOR_NAME=${VENDOR_NAME}"
Run Code Online (Sandbox Code Playgroud)

脚本输出:

CONFIG_OPTION=VENDOR_NAME
VENDOR_NAME=value
Run Code Online (Sandbox Code Playgroud)