我有一个文本文件,其中包含对变量的引用,并允许用户围绕变量设置他们想要的格式,比如
The date is $DATE
The time is $TIME
然后我想读入这个文本文件,替换变量,并使用 bash 脚本将结果打印到标准输出。我得到的最接近的东西是使用“echo”来输出它,
DATE="1/1/2010"
TIME="12:00"
TMP=`cat file.txt`
echo $TMP
但是,输出全部在一行中结束,我不想在文本文件的每一行末尾都有\n。我尝试使用“cat << $TMP”,但是没有换行符,文本中的变量也没有被值替换。
最佳答案
您可以使用eval
来确保变量在您的数据文件中展开:
DATE="1/1/2010"
TIME="12:00"
while read line
do
eval echo ${line}
done < file.txt
请注意,这允许控制文件内容的用户执行任意命令。
如果输入文件不在你的控制范围内,一个更安全的解决方案是:
DATE="1/1/2010"
TIME="12:00"
sed -e "s#\$DATE#$DATE#" -e "s#\$TIME#$TIME#" < file.txt
它假定 $DATE
和 $TIME
都不包含 #
字符,并且不应扩展其他变量。
关于linux - Bash 脚本变量解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9011947/