Bash回显变量名,而不是值

Bash回显变量名,而不是值,bash,echo,Bash,Echo,我刚才试图回答这个问题: 我有一个文件(inputfile.txt),其中一些变量正在初始化,例如: name="Joe" last="Doe" ... # Many more variables defined here city="Los Angeles" 该文件可以有几行长,并且变量名是任意的。现在,我想通过执行以下操作来回显输入文件中的所有变量: echo "$(grep -o "^[^=]\+" inputfile.txt | sed '

我刚才试图回答这个问题:

我有一个文件(
inputfile.txt
),其中一些变量正在初始化,例如:

name="Joe"
last="Doe"
...                        # Many more variables defined here
city="Los Angeles"
该文件可以有几行长,并且变量名是任意的。现在,我想通过执行以下操作来回显输入文件中的所有变量:

echo "$(grep -o "^[^=]\+" inputfile.txt | sed 's/^/\$/;:a;N;$!ba;s/\n/$/g')"
但这会打印变量名,因此输出为:

$name$lastname...$city

我的问题是:
echo
为什么打印变量名而不是它们的值?我知道使用单引号将打印变量名(如
echo'${var}${var2}'
将打印
${var}${var2}
)。但在我的例子中,我有双引号(
echo“${var1}${var2}”
)那么为什么不显示变量值呢?

您使用grep来解析inputfile.txt,在sed中添加$,结果是,您从$和变量名的组合中生成了字符串,而变量名本身不是变量。

您可以在echo语句中使用eval,以便它生成您想要的结果,然后您可以回显它结果。太棒了,使用eval有效,谢谢。