if [ -r "$1" ] ; 무슨 뜻인가요? 의미는?

if [ -r "$1" ] ; 무슨 뜻인가요? 의미는?

저는 쉘에 비교적 새로운 사람입니다(지금은 기본만 알고 있습니다). 버그를 수정하기 위해 스크립트를 이해하려고 노력하고 있지만 Google을 통해 답변을 찾을 수 없는 것을 우연히 발견했습니다(아마도 올바른 것을 검색하지 않고도).

if [ -r "$1" ] ; 

나는 제어 흐름에 대해 매우 잘 알고 있으며 이것이 $1스크립트에 전달되는 매개 변수라는 것도 알고 있습니다. 우리가 평가하고 있는 실제 표현식이 무엇인지 모르겠습니다.-r

어떤 도움이라도 대단히 감사하겠습니다!

답변1

연산자와 첫 번째 위치 인수(또는 위치 인수가 설정되지 않은 경우 빈 문자열)의 내용을 연산자의 피연산자(및 대칭의 클로저 ) 로 [사용하여 명령을 실행 합니다 .-r-r]

[명령은 Bourne과 유사한 모든 쉘(및 fish)에 내장되어 있습니다. 따라서 해당 문서는 일반적으로 해당 쉘 매뉴얼에서 찾을 수 있습니다. 로도 알려져 있습니다 test.

쉘에 따라 다음을 시도해 보십시오.

  • info zsh test
  • info bash '['
  • fish -c 'help test'
  • 또는 man ksh/... man dash정보 페이지가 없는 쉘의 경우.

(일부 시스템에서는 이러한 쉘에서 문서 형식을 사용할 수 있도록 하려면 bash-doc또는 패키지를 설치해야 합니다 .)zsh-docinfo

또한 시스템에는 독립 실행형 명령 [이나 test다른 유형의 셸이나 셸이 아닌 것에서 사용할 수 있는 유사한 인터페이스가 있는 명령이 있는 경우가 많으며 명령을 실행하기 위해 셸을 사용하지 않습니다(예 env: find -exec...). 문서는 info test또는 man test( man '['아마도)에서 찾을 수 있습니다.

특히 -r운영자는 명령을 실행하는 프로세스 [(내장 셸 [)에 지정된 파일을 열 수 있는 권한이 있는지 테스트합니다.읽다. true인 경우 [명령은 다음을 반환합니다.성공if명령문의 이 부분이 실행되는 경우의 종료 상태입니다 then.

access(argv[1], R_OK)이는 C의 상황 과 동일합니다 .

답변2

질문 -r: 사용자에게 $1피연산자로 식별된 파일에 대한 읽기 권한이 있습니까?

test이 유틸리티에 대한 POSIX 사양모든 표준 연산자를 포함하는 목록입니다.

그 중 일부는 다음과 같습니다:

-e file exists
-f file is a regular file (not a directory or device file)
-s file is not zero size
-d file is a directory
-b file is a block device
-c file is a character device
-p file is a pipe
-L file is a symbolic link
-S file is a socket
-t file (descriptor) is associated with a terminal device
-r file has read permission (for the user running the test)
-w file has write permission (for the user running the test)
-x file has execute permission (for the user running the test)

관련 정보