$ 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)
bash
option 으로 시작하는 경우 실행할 문자열(있는 경우) 다음의 첫 번째 인수로 설정됩니다-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'
( /bin
is in my ) 만 사용하면 예상한 대로 $PATH
출력됩니다 bash
.
답변3
내가 아는 한, bash 매뉴얼은 이 경우에 무슨 일이 일어나는지 설명하지 않습니다. 할당할 인수가 없으면 스크립트도 옵션도 없는 것처럼 bash를 호출하는 데 사용되는 파일 이름으로 설정 bash -c COMMAND
됩니다 .$0
$0
-c
이는 표준 동작입니다.POSIX로 인코딩됨.
"그렇지 않으면"의 의미는 영어 사전을 참조하세요.