우리가 사용하는 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
[
mksh
sh
[[
-a
mksh
$ 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
$