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

时间:2015-01-24 13:21:52

标签: bash

我正在尝试编写一个小脚本,我无法弄清楚如何根据用户的输入动态选择要回显的变量(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”作为命令运行。

任何提示都将受到高度赞赏。

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)。