我有以下变量:
# config file
MYVAR_DEFAULT=123
MYVAR_FOO=456
#MYVAR_BAR unset
# program
USER_INPUT=FOO
TARGET_VAR=<need to be set>
如果 USER_INPUT 是“foo”,我想TARGET_VAR
成为MYVAR_FOO
( TARGET_VAR
=456) 的值。如果USER_INPUT
是“bar”我想TARGET_VAR
设置为MYVAR_DEFAULT
(123),因为MYVAR_BAR
未设置。
我更喜欢它与 sh 兼容并作为替换字符串。但它也可能与 bash 兼容和/或在函数中。
我得到了这些片段:
# Default values for variable (sh-compatible)
echo ${MYVAR_FOO-$MYVAR_DEFAULT}
# Uppercase (bash compatible)
echo ${USER_INPUT^^}
我需要这样的东西:
TARGET_VAR="${MYVAR_${USER_INPUT^^}-$MYVAR_DEFAULT}"
# or
somecommand -foo "${MYVAR_${USER_INPUT^^}-$MYVAR_DEFAULT}"
这是在多个“配置文件”之间切换一堆变量。在示例中,FOO
和BAR
是配置文件。新的配置文件应该很容易添加,在这个例子中会有一个隐式的配置文件命名为BAZ
,所有变量都为其默认值。
不幸的是,这并不容易。你有解决这个问题的想法吗?
提前致谢,克里斯
我想我明白了:
它与 bash 兼容。没有
${USER_INPUT^^}
它也适用于 sh。它不太漂亮,但工作 ;)USER_INPUT
仅由值得信赖的用户设置,所以没问题一条
case
语句可以处理更多的变体。您可以根据您的需要调整它 - 将其包装在一个函数或其他任何东西中。