if 문에서 대문자 -N 옵션은 무엇을 의미합니까?

if 문에서 대문자 -N 옵션은 무엇을 의미합니까?
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되었습니다 .bashyash

요즘에는 많은 시스템이 성능상의 이유로 파일의 액세스 타임스탬프를 업데이트하지 않기 때문에 더 이상 유용하지 않습니다.

답변2

이는 일반적인 조건식이 아닌 Bash 조건식입니다 test.그 뜻은

-N 문서

만약에 사실이다문서존재하며 마지막 읽기 이후 수정되었습니다.

-N파일 수정 시간이 액세스 시간보다 늦으면 참입니다.

관련 정보