Bash: echo 提取变量

Bash: echo extract variables

假设有一个名为 'test.sh' 的脚本:

#!/bin/bash
while read line; do
    APP=/apps echo "$line"
done < ./lines

和 'lines':

cd $APP && pwd

如果我bash test.sh,它会打印出'cd $APP && pwd'。

但是当我在终端中输入 APP=/apps echo "cd $APP && pwd" 时,它会打印出 'cd /apps && pwd'。

是否可以使用 echo 提取从常规文件读取的变量?

您应该使用 eval 来评估从文件中读取的字符串行

根据文件的内容,您可能需要使用 eval:

#!/bin/bash
APP=/apps
while read line; do
    eval "echo \"$line\""  # WARNING: dangerous
done < ./lines

但是,eval 非常危险。虽然这里的引用适用于简单的情况,但通过操纵输入来执行任意命令是相当容易的。

如果您知道要替换的变量,只需替换它们即可。

sed 's%$APP\>%/apps%g' ./lines