Я знаю, что никто не упомянет об этом, поэтому я пойду. Вы можете использовать printf
!
#!/bin/bash
CONFIG_OPTION="VENDOR_NAME"
CONFIG_VALUE="Default_Vendor"
printf -v $CONFIG_OPTION "$CONFIG_VALUE"
# Don't believe me?
echo "$VENDOR_NAME"
Done!
Кстати, это довольно быстрый метод (так же быстро, как метод declare
).
Это использует 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
Для чистой оболочки, возможно, попробуйте:
#!/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?