테스트(AIX 및 ksh93)

테스트(AIX 및 ksh93)

우리가 사용하는 ksh93 테스트 한정자 중 하나에 대해 혼란스럽습니다. 20여년 전에 우리는 "Unix Shell 프로그래밍 - KornShell 기능" 과정을 수강했습니다. 강좌와 함께 제공되는 매뉴얼에는 파일이 존재하면 "-a filename"이 성공할 것이라고 나와 있습니다. 그 이후로 우리는 "-a"를 광범위하게 사용해 왔습니다. 나는 최근에 "-a"가 테스트를 위한 "이진 AND 연산자"이고(AIX 7.1에서 ksh93을 사용하고 있음) "man test"가 해당 링크와 동일한 출력을 표시한다는 이 링크를 발견했습니다.

https://www.ibm.com/support/knowledgecenter/en/ssw_aix_71/com.ibm.aix.cmds5/test.htm

이제 링크는 일반 AIX 링크로 나타납니다. 즉, 나에게 그것은 ksh, csh, sh 등에 국한되지 않으므로 어떻게 적용되는지 잘 모르겠습니다.

기존 코드가 예상대로 작동하는 것 같습니다. 현재 우리가 어떻게 사용하는지에 대한 예는 다음과 같습니다.

if [[ -a filename ]]
then
    ....
fi

파일 테스트를 위한 다른 한정자가 있다는 것을 알고 있지만 맨페이지에서는 존재 여부를 확인하지 않는다고 제안하는데 "-a"가 존재 여부를 확인하는 것처럼 보이는 이유가 궁금합니다.

미리 감사드립니다.

답변1

ksh매뉴얼 에서 :

   Conditional Expressions.
       A  conditional  expression  is  used with the [[ compound command to test attributes of files and to
       compare strings.  Field splitting and file name generation are not performed on the words between [[
       and  ]].   Each  expression  can  be  constructed  from one or more of the following unary or binary
       expressions:
       string True, if string is not null.
       -a file
              Same as -e below.  This is obsolete.
       -e file
              True, if file exists.

답변2

(또는) 에 있는 바이너리는 test쉘에 내장된 바이너리와 다릅니다. 쉘 문서를 참조하세요. 셸에 따라 바이너리가 아닌 셸 내장 함수를 호출하거나 실제로 호출할 수도 있습니다. 다음은 AIX나 해당 KSH가 아니지만 지원되지 않거나 플래그가 있지만 지원되는 가보 bourne 쉘 또는 Mac OS X에서는 다음과 같습니다.[PATH[[[[test[mkshsh[[-amksh

$ sh
$ [[ -a /etc/passwd ]] && echo yea
[[: not found
$ [ -a /etc/passwd ] && echo yea
test: argument expected
$ exit
$ [[ -a /etc/passwd ]] && echo yea
yea
$ [ -a /etc/passwd ] && echo yea
yea
$ 

관련 정보