如何在Bash中回显(打印)变量的值?

如何在Bash中回显(打印)变量的值?,bash,Bash,我正在尝试编写一个小脚本,但我不知道如何根据用户的输入动态选择要echo'ed的变量(echo$TEST''响应): #!/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' ];

我正在尝试编写一个小脚本,但我不知道如何根据用户的输入动态选择要echo'ed的变量(echo$TEST''响应):

#!/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
因为它是不可伸缩的。使用backticks,比如

echo `$'TEST'_"$response"`
也没有帮助,因为bash希望将结果“TEST_1”或“TEST_2”作为命令运行


任何提示都将不胜感激。

您需要间接扩展,以便与
${!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
也就是说,您需要使用变量的变量名,这是通过间接扩展完成的:您使用具有变量名的变量,然后使用
${!var}
语法对其求值

在您的情况下,请使用:

myvar="TEST$response"
echo "${!myvar}"

对于除数字以外的任何内容,请始终使用引号,如
“$string”
。对于数字,只需保持正常(即,
$number
)。

我感觉就像在大海捞针。很好用,谢谢!很高兴读到,@user2758131!既然你是新来的,如果你的问题已经解决了,请别忘了把答案标为“接受”。您可以点击答案旁边的复选标记,将答案从空心切换为绿色。看看你是否有任何疑问!谢谢你的帮助!