빈 문자열이 파일인가요? (만약 [!-f ""])

빈 문자열이 파일인가요? (만약 [!-f ""])

스크립트가 호출됩니다.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 셸에서 변수를 인용해야 하는 이유입니다.

관련 질문:

관련 정보