In my bash script I have two variables CONFIG_OPTION
and CONFIG_VALUE
which contain string VENDOR_NAME
and Default_Vendor
This uses bash builtins:
#!/bin/bash
VAR1="VAR2"
declare "${VAR1}"="value"
echo "VAR1=${VAR1}"
echo "VAR2=${VAR2}"
The script output:
VAR1=VAR2
VAR2=value
Here's the snippet using your variable names:
#!/bin/bash
CONFIG_OPTION="VENDOR_NAME"
declare "${CONFIG_OPTION}"="value"
echo "CONFIG_OPTION=${CONFIG_OPTION}"
echo "VENDOR_NAME=${VENDOR_NAME}"
The script output:
CONFIG_OPTION=VENDOR_NAME
VENDOR_NAME=value
I know that nobody will mention it, so here I go. You can use 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"
For pure shell, possibly try:
#!/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
Why?
#!/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
I don't like eval, but are there any POSIX options?