如何grep存储在变量中的值

如何grep存储在变量中的值

我正在编写一个 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'

如果没有单引号,上述消息将无法正确输出。

相关内容