在我的bash脚本中,我有两个变量CONFIG_OPTION
和CONFIG_VALUE
,分别包含字符串VENDOR_NAME
和Default_Vendor
。
我需要创建一个名为$CONFIG_OPTION
的变量,即VENDOR_NAME
,并将CONFIG_VALUE
中的值分配给新创建的变量。
我怎么能这样做?
我试过
$CONFIG_OPTION=$CONFIG_VALUE
但我在这一行收到错误
'./Build.bash: line 137: VENDOR_NAME="Default_Vendor": command not found'
感谢。
答案 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选项?