![if 语句中的大写 -N 选项是什么意思?](https://linux22.com/image/132072/if%20%E8%AF%AD%E5%8F%A5%E4%B8%AD%E7%9A%84%E5%A4%A7%E5%86%99%20-N%20%E9%80%89%E9%A1%B9%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F.png)
man test
仅解释-n
含义,带有小写 n。
大写的 -N 在此脚本中如何工作?
#!/bin/bash
# Check for an altered certificate (means there was a renew)
if [[ -N '/etc/letsencrypt/live/mx1.example.com/fullchain.pem' ]]; then
# Reload postfix
/bin/systemctl reload postfix
# Restart dovecot
/bin/systemctl restart dovecot
fi
答案1
-N
(for ew)选项N
在 1996 年的 3.0.1 版本中被添加到 zsh 的条件表达式中,以支持新的checkmail
自动加载功能,该功能可用于检查您的任何邮箱中是否有新邮件($MAIL
, $mailpath
...)
它通过检查文件的修改时间是否比上次访问时间更新来实现这一点,换句话说,自上次修改以来尚未读取该文件(自从您在应用于邮箱文件时收到电子邮件以来)。
Sun Aug 25 23:06:43 1996 Zoltán Hidvégi <[email protected]>
* Functions/checkmail, Doc/zsh.texi, Doc/zshmisc.man, Src/cond.c,
Src/parse.c: new -N contitional test to check if the access time
of a file is not newer than its modification time. A new
checkmail function is also included to check mailpath or the
given forlers for new mails.
有趣的是,该checkmail
功能从未被记录下来(它仍然包含在 中zsh
,您仍然可以这样做autoload checkmail; checkmail
),并且该功能(在每次提示之前检查新电子邮件)已经内置在 shell 中,就像 80 年代的 Korn shell 中一样。明年,stat
3.1.2 中引入的新内置函数也使得该-N
测试变得不必要,因为mtime > atime
检查可以手动完成,所以很幸运标志存在。
然而,后来它test -N
被bash
(1998 年的 2.02)、ksh93(2003 年的 ksh93o)和yash
(2010 年的 2.22)复制。
如今,由于性能原因,许多系统选择不再更新文件的访问时间戳,因此它不再那么有用。