【发布时间】:2018-07-25 19:27:38
【问题描述】:
我编写了一个小 bash 脚本来制作一个“shell”,用于打印命令执行前后的日期:
while true
do date
printf "Prompt: "
read x
date
$x #Solution: this should be eval "$x"
done
问题是这个“shell”不能识别 $x 中的变量,所以例如echo $PWD 输出$PWD 而不是当前目录。一个相关的后果是cd 不起作用。如何解决/解决这个问题?谢谢。
编辑:已解决。谢谢大家:-)
后期编辑:实际上以上并不是解决方案;我需要将-r 选项添加到read 命令,以防止反斜杠序列被过早评估。此外,在这种情况下,双引号毕竟是多余的(因为 prepass 会将 $x 和 "$x" 扩展为相同的东西,除非$x 为空,并且eval 做同样的事情,没有参数它使用空字符串),但我认为出于安全性和良好风格考虑始终包含引号永远不会受到伤害。
【问题讨论】:
-
也许你想
eval "$x"?但是……为什么? -
这正是我想要的。因为我想在每个命令之前和之后打印日期,而不必每次都实际输入
date; <command>; date。
标签: bash shell variables tokenize