我正在编写一个 bash 脚本,其中将当前日期存储在变量中,然后对该变量进行 grep 处理。问题是它不起作用
currentdate= $(date +%b\ %d)
echo "$currentdate"
last |grep -E '$currentdate'>> /usr/IBM/HTTPServer7/logs/alert/users.txt
users.txt
显示为空。如果我手动写入当前日期,那么它就可以工作。我究竟做错了什么?
答案1
除了引号之外,您还需要考虑命令使用的日期格式last
,如下所示:
Dec 3 # Note the padding to the left of '3'.
Nov 23
这需要一个稍微不同的日期命令:
date "+%b %_d"
Dec 4
下划线指示date
用空格填充该字段。您还可以使用 %e 作为替代。
将这些放在一起,您可以修改脚本,如下所示:
currentdate=$(date "+%b %_d")
last | grep "$currentdate" >> /usr/IBM/HTTPServer7/logs/alert/users.txt
答案2
@Sparhawk是正确的。
双引号导致 shell 扩展变量。
$ VAR=blahblah
$ echo "$VAR"
blahblah
单引号使 shell 按字面意思使用文本。
$ VAR=blahblah
$ echo '$VAR'
$VAR
如果您想防止 shell 将美元符号加上其他一些文本视为变量,则可以使用此选项。
echo 'This script is terminating because you didn't set $IMPORTANT_VARIABLE'
如果没有单引号,上述消息将无法正确输出。