Bash:使用变量替换从文件中读取字符串

问题描述 投票:0回答:1

我有一个奇怪的情况,我有一个命令存储在一个文件中,并且该文件包含对变量的引用。

我能够很好地读取文件,但我在变量扩展工作方面遇到困难。

作为最小工作示例,这里是一个包含带有变量的命令的文件作为示例:

命令.in

ls $DIR

简单.sh

#!/bin/bash

MYVAR=$(<command.in)
DIR="/tmp"

$MYVAR

预期结果

我的预期结果是它会打印 /tmp 的内容

我尝试过的事情

我尝试将

DIR
作业移至
MYVAR
中的
simple.sh
作业上方,并且尝试将
$DIR
中的
command.in
更改为
${DIR}
$(DIR)

bash shell file variable-assignment variable-substitution
1个回答
0
投票

$(<command.in)
确实取消引用变量。如果您在脚本中添加
echo
,您可以看到发生了什么:

#!/bin/bash
DIR="/tmp"
MYVAR=$(<command.in)
echo $MYVAR
$MYVAR

给出:

bash simple.sh
ls $DIR
ls: cannot access '$DIR': No such file or directory

当您执行

$MYVAR
时,变量会扩展一次。所以它会产生
ls $DIR
并且这就是执行的内容。使用
eval
,您可以强制进行另一级别的变量扩展:

#!/bin/bash
DIR="/tmp"
MYVAR=$(<command.in)
echo $MYVAR
eval $MYVAR
© www.soinside.com 2019 - 2024. All rights reserved.