Bash: 从文件读取时命令替换
Bash: command substitution when reading from a file
不确定我在这里是不是很笨,但我想不通。
如果我把它放在 bash 脚本中:
var="`date '+%a %b %d'`*.*INFO Ended execution of script"
echo $var
我得到的输出是:
Mon Sep 27*.*INFO Ended execution of script
但是,如果我将相同的内容放入文件中:
"`date '+%a %b %d'`*.*INFO Ended execution of script"
然后写一个小bash脚本来读取这个文件的内容
while read -e line
do
echo "$line"
done < file
当我执行这个脚本时,我得到
"`date '+%a %b %d'`*.*INFO Ended execution of script"
当我从文件中读取内容时,如何让命令替换生效?
需要说明的是,这是一个非常的坏主意,而且您实际上不应该这样做。但是,它看起来像:
while IFS= read -r line; do
eval "echo $line" ## DANGEROUS: Do not do this!
done
就为什么这是个坏主意而言:
- 天生缺乏安全感。 BashFAQ #48 对此进行了详细介绍,但简而言之,如果您的数据可以 运行
date
命令,它也可以 运行 任何其他命令 还有。
- 速度很慢。
$(date)
每次 运行 时都会启动 /usr/bin/date
的新副本。使用 printf -v date '%(%a %b %d)T' -1
以您想要的格式存储日期 $date
的速度要快得多。
不确定我在这里是不是很笨,但我想不通。
如果我把它放在 bash 脚本中:
var="`date '+%a %b %d'`*.*INFO Ended execution of script"
echo $var
我得到的输出是:
Mon Sep 27*.*INFO Ended execution of script
但是,如果我将相同的内容放入文件中:
"`date '+%a %b %d'`*.*INFO Ended execution of script"
然后写一个小bash脚本来读取这个文件的内容
while read -e line
do
echo "$line"
done < file
当我执行这个脚本时,我得到
"`date '+%a %b %d'`*.*INFO Ended execution of script"
当我从文件中读取内容时,如何让命令替换生效?
需要说明的是,这是一个非常的坏主意,而且您实际上不应该这样做。但是,它看起来像:
while IFS= read -r line; do
eval "echo $line" ## DANGEROUS: Do not do this!
done
就为什么这是个坏主意而言:
- 天生缺乏安全感。 BashFAQ #48 对此进行了详细介绍,但简而言之,如果您的数据可以 运行
date
命令,它也可以 运行 任何其他命令 还有。 - 速度很慢。
$(date)
每次 运行 时都会启动/usr/bin/date
的新副本。使用printf -v date '%(%a %b %d)T' -1
以您想要的格式存储日期$date
的速度要快得多。