我正在尝试编写一个小脚本,我无法弄清楚如何根据用户的输入动态选择要回显的变量(echo $'TEST'_“$ response”):
#!/usr/bin/env sh
response=response
TEST_1="Hi from 1!"
TEST_2="Hi from 2!"
while [ $response ]; do
read -p "Enter a choice between 1 - 2, or 'bye': " response
if [ $response = 'bye' ]; then
echo "See You !"; exit
elif [ $response -ge 1 ] && [ $response -le 2 ]; then
echo $'TEST'_"$response"
else
echo "Input is not a valid value."
fi
done
所需的输出将是我脚本开头声明的其中一个变量的值(“Hi from 1!”或“Hi from 2!”)。相反,我的脚本simple将变量的名称输出为字符串“TEST_1”或“TEST_2”。我不只是想硬编码将要打印的变量,如:
if [ $response -ge 1 ]; then
echo $TEST_1
fi
因为它不可扩展。使用像
这样的反引号echo `$'TEST'_"$response"`
没有任何帮助,因为bash期望将结果“TEST_1”或“TEST_2”作为命令运行。
任何提示都将受到高度赞赏。
答案 0 :(得分:0)
您需要间接扩展,才能与${!var}
一起使用:
$ TEST1="hello"
$ TEST2="bye"
$ v=1
$ var="TEST$v" #prepare the variable name of variable
$ echo ${!var} #interpret it
hello
$ v=2
$ var="TEST$v" #the same with v=2
$ echo ${!var}
bye
也就是说,你需要使用变量的变量名,这是通过间接扩展完成的:你使用一个带变量名称的变量然后用{来计算它' {1}}语法。
在您的情况下,请使用:
${!var}
答案 1 :(得分:0)
对于其他而不是数字,始终使用引号(例如"$string"
)。对于数字,请保持正常(即$number
)。