Bash:echo提取变量

时间:2015-01-29 06:58:38

标签: bash shell

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

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

和'线':

cd $APP && pwd

如果我bash test.sh,则打印出'cd $ APP&amp;&amp; PWD”。

但是当我在终端中键入APP=/apps echo "cd $APP && pwd"时,它会输出'cd / apps&amp;&amp; PWD”。

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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