스크립트가 호출됩니다.isFile.sh다음과 같습니다.
#!/bin/sh 에코 $1 에코 $2 만약에[ ! -f $1 ]; echo "$1 (arg1)은 파일이 아닙니다." 필리핀 제도 만약에[ ! -f $2 ]; echo "$2 (arg2)는 파일이 아닙니다." 필리핀 제도
먼저 touch file.exist
.
내 실행 결과는 bash isFile.sh file.exist file.notexist
다음과 같습니다.
파일이 존재
.note 파일이 존재합니다.
file.notexist(arg2)는 파일이 아닙니다.
그런 다음 bash isFile.sh "" file.notexist
출력은 다음과 같습니다.
(#빈줄)
.note 파일이 존재합니다.
file.notexist(arg2)는 파일이 아닙니다.
예상되는 출력은 다음과 같습니다.
(#빈줄)
.note 파일이 존재합니다.
(arg1)은 파일이 아닙니다
file.notexist(arg2)는 파일이 아닙니다.
누군가 이유를 설명할 수 있나요?
답변1
[ ! -f $1 ]
문제 는 확장 후 [ ! -f ]
( [ ! -f "" ]
생각과는 다릅니다!) 주어진 파일이 존재하는지 확인하는 경우 문자열이 비어 있는지 [
확인한다는 것입니다. -f
비어 있지는 않지만 !
최종 종료 코드가 이므로 1
명령 echo
이 실행되지 않습니다 .
이것이 POSIX 셸에서 변수를 인용해야 하는 이유입니다.
관련 질문: