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
假设有一个名为 '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