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
이는 파일의 수정 시간이 마지막 액세스 시간보다 최신인지 확인하여 이를 수행합니다. 즉, 마지막 수정 이후(메일함 파일에 적용할 때 이메일을 받은 이후) 파일을 읽지 않았는지 확인합니다.
~에서Changelog
당시의 문서:
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
) 기능(각 프롬프트 전에 새 이메일 확인)은 80년대와 마찬가지로 이미 셸에 내장되어 있습니다. Korn 셸과 동일합니다. 내년 stat
에는 3.1.2에 도입된 새로운 내장 기능도 검사를 수동으로 수행할 수 -N
있으므로 이 테스트를 불필요하게 만들어 mtime > atime
플래그가 존재한다는 것은 행운입니다.
그러나 나중에 (1998년 2.02), ksh93(2003년 ksh93o) 및 (2010년 2.22) 에 의해 복사 test -N
되었습니다 .bash
yash
요즘에는 많은 시스템이 성능상의 이유로 파일의 액세스 타임스탬프를 업데이트하지 않기 때문에 더 이상 유용하지 않습니다.
답변2
이는 일반적인 조건식이 아닌 Bash 조건식입니다 test
.그 뜻은
-N 문서
만약에 사실이다문서존재하며 마지막 읽기 이후 수정되었습니다.
-N
파일 수정 시간이 액세스 시간보다 늦으면 참입니다.