假设有一个名为'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
提取从常规文件中读取的变量?
答案 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