linux - Bash 脚本变量解释

标签 linux bash shell unix

我有一个文本文件,其中包含对变量的引用,并允许用户围绕变量设置他们想要的格式,比如

 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/

相关文章:

linux - Qt 应用程序需要 KDE 吗?

python - 在 Python 中通过 os.system 在命令行上执行 MySQL 查询

linux - perl + 仅当八位字节是有效 IP 时才替换 IP 地址

来自旧硬盘系统的 mysql datadir 无法启动

android - 从内核中找到正确的 Android 触摸屏驱动程序文件

linux - 通过 ssh 传递外部 shell 脚本变量

linux - 无法在 crontab 中运行 shell 脚本

bash - 从分隔文件中提取第一个字段

bash - 我怎样才能在 bash 中自动完成带有空格的文件名?

bash `set -e` 在通过 `$(...)` 运行时重置内部功能?