gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:26:06 24 4
gpt4 key购买 nike

我正在尝试编写一个小脚本,但我不知道如何根据用户的输入动态地选择要回显的变量(回显 $'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!”)。相反,我的脚本简单地将变量名称输出为字符串“TEST_1”或“TEST_2”。我不只是想硬编码将打印的变量,如:

if [ $response -ge 1 ]; then
echo $TEST_1
fi

因为它不可扩展。使用像

这样的反引号
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}"

关于bash - 如何在 Bash 中回显(打印)变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28125887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com