案例场景:
$ echo "1,2,4" | grep -v [0-9]
[No results, as expected]
但是,当通过以下方式进行时cron
:
$ crontab -l
[...]
* * * * * echo "1,2,4" | grep -v [0-9] > /tmp/debug.dump
[...]
$ cat debug.dump
1,2,4
解决方案(或者可能是解决方法,我不知道):
$ crontab -l
[...]
* * * * * echo "1,2,4" | grep -v "[0-9]" > /tmp/debug.dump
[...]
$ cat debug.dump
[No results, as expected]
我想理解这个问题,而不是仅仅解决它然后忘记它。
为什么双引号可以解决这个问题?
注意:这是 FreeBSD v10.3。
答案1
运行此 cron 作业的用户的主目录中有一个名为 0、3、5、6、7、8 或 9 的文件。 shell 将未加引号的[0-9]
参数扩展为该文件名(假设是0
);由于0
输入中没有' ,因此grep -v
“成功”并且不打印任何内容。
当您进行测试时,您位于不同的目录中(没有一位数文件名的目录)。双(或单)引用参数可防止 shell 扩展该 glob,从而允许 grep 将其视为范围。