我有一个奇怪的情况,我有一个命令存储在一个文件中,并且该文件包含对变量的引用。
我能够很好地读取文件,但我在变量扩展工作方面遇到困难。
作为最小工作示例,这里是一个包含带有变量的命令的文件作为示例:
ls $DIR
#!/bin/bash
MYVAR=$(<command.in)
DIR="/tmp"
$MYVAR
我的预期结果是它会打印 /tmp 的内容
我尝试将
DIR
作业移至 MYVAR
中的 simple.sh
作业上方,并且尝试将 $DIR
中的 command.in
更改为 ${DIR}
和 $(DIR)
$(<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