왜 `bash -c 'echo $0 '`는 "bash"를 인쇄합니까?

왜 `bash -c 'echo $0 '`는 "bash"를 인쇄합니까?
$ bash -c 'echo $0 ' foo 
foo

$ bash -c 'echo $0 '  
bash

배쉬 매뉴얼에서

($0)은 쉘 또는 쉘 스크립트의 이름으로 확장됩니다. 이는 쉘이 초기화될 때 설정됩니다.

Bash가 명령 파일을 사용하여 호출되면(39페이지의 섹션 3.8 [쉘 스크립팅] 참조) $0이 파일 이름으로 설정됩니다.

Bash가 -c 옵션으로 시작된 경우(80페이지의 섹션 6.1 [Bash 호출] 참조) $0은 다음으로 설정됩니다.실행할 문자열 뒤의 첫 번째 매개변수, 누군가가 있다면.

그렇지 않으면, 인수 0으로 제공되는 Bash를 호출하는 데 사용되는 파일 이름으로 설정됩니다.

"그렇지 않으면"은(는) 무슨 뜻인가요?

어떤 경우가 포함되나요?

"실행할 문자열 뒤의 인수" 없이 -c로 bash를 시작하는 경우도 포함됩니까?

bash -c 'echo $0 '인용문의 두 번째 경우에 따르면 아무것도 출력되지 않을 것으로 예상했는데 bash.

감사해요.

답변1

인용한 문서에는 세 가지 경우가 있습니다.

bash명령 파일을 사용하여 호출 하면 $0파일 이름으로 설정됩니다.

(사례 1)

bashoption 으로 시작하는 경우 실행할 문자열(있는 경우) 다음의 첫 번째 인수로 설정됩니다 -c.$0

(사례 2; 두 개의 "if"에 유의하세요. 이 경우 둘 다 충족되어야 합니다.)

bash그렇지 않으면 인수 0으로 제공되는 호출에 사용되는 파일 이름으로 설정됩니다 .

(사례 3).

"otherwise" 절은 사례 1과 2에 포함되지 않는 모든 사례를 다룹니다. 즉, bash명령 파일과 함께 호출되지 않거나, 옵션 bash으로 시작하지 않거나 -c, 옵션으로 시작 하지만 뒤에 인수가 나오지 않는 -c실행될 문자열 입니다.

-c예, 실행될 문자열 다음에 인수 없이 Bash가 시작되는 것을 포함합니다. 또한 대화형 셸은 명령 파일이나 옵션 없이 시작될 echo $0가능성이 높으므로 대화 형 셸에서 실행할 때의 기본 사례도 다룹니다 .-c

답변2

/bin매뉴얼을 더 잘 이해하기 위해 테스트할 수 있습니다 . 다음과 같은 절대 경로를 사용하여 -c 플래그를 사용하여 bash를 호출한다고 가정해 보겠습니다 .

/bin/bash -c 'echo $0'

출력은 Bash를 호출 /bin/bash하는 데 사용한 이름과 같습니다 /bin/bash. bash -c 'echo $0'( /binis in my ) 만 사용하면 예상한 대로 $PATH출력됩니다 bash.

답변3

내가 아는 한, bash 매뉴얼은 이 경우에 무슨 일이 일어나는지 설명하지 않습니다. 할당할 인수가 없으면 스크립트도 옵션도 없는 것처럼 bash를 호출하는 데 사용되는 파일 이름으로 설정 bash -c COMMAND됩니다 .$0$0-c

이는 표준 동작입니다.POSIX로 인코딩됨.

"그렇지 않으면"의 의미는 영어 사전을 참조하세요.

관련 정보