나는 오타를 만들어 bash 스크립트에 $$(에코에 대한 인수로)를 썼습니다. 숫자(1979)가 인쇄됩니다. 나는 이것을 여러 번 시도했지만 같은 숫자를 인쇄했기 때문에 이것이 Unix 시대와 관련이 있을 것이라고 생각했습니다. bash 매뉴얼이나 인터넷에서 이에 대한 정보를 찾지 못했습니다. 그런 다음 기본 sh를 시도했는데 다른 숫자인 5755가 인쇄되었고 새 sh를 닫았다가 열면 약간 다른 숫자가 인쇄되었습니다.
이 변수는 무엇을 보유해야 합니까? 이 숫자는 무엇을 의미하나요?
답변1
많은 특수 쉘 변수 중 하나입니다. ~에서POSIX 표준이와 관련된:
$
호출 쉘의 10진수 프로세스 ID로 확장됩니다. 서브셸에서(참조쉘 실행 환경),
$
현재 쉘과 동일한 값으로 확장되어야 합니다.
다른 특수 셸 변수에는 !
(가장 최근에 시작된 백그라운드 작업의 PID), ?
(가장 최근에 종료된 작업의 종료 상태), #
(위치 인수 수), *
(위치 인수, 단일 문자열로 연결됨), @
(위치 인수, 다음과 같이 포함됩니다. 목록) , -
(현재 쉘 옵션) 및 0
(0, 쉘 또는 스크립트의 이름).
또한 bash
매뉴얼의 "특수 매개변수" 섹션에서:
$
셸의 프로세스 ID로 확장됩니다. 서브쉘 에서는
()
서브쉘이 아닌 현재 쉘의 프로세스 ID로 확장됩니다.
다른 쉘의 매뉴얼에도 비슷한 문구가 있습니다.
즉, $
입력을 통해 값을 얻은 변수는 $$
현재 셸 프로세스의 프로세스 ID(PID)를 보유합니다.
다음과 같이 다시 확인할 수 있습니다.
% echo "$$"
85776
% ps -p "$$"
PID TT STAT TIME COMMAND
85776 p1 SN 0:00.19 -zsh (zsh)
이는 내 특정 쉘 프로세스가 85776으로 확장되었으며 이 PID가 내가 사용 중인 로그인 쉘 $$
과 일치한다는 것을 보여줍니다.zsh
답변2
이 변수는 현재 쉘의 PID, 즉 프로세스 ID를 표시합니다. 주어진 쉘에서 이 변수를 에코(또는 액세스)할 때마다 동일합니다. 새 셸(또는 하위 셸)을 시작하고 액세스할 때마다 원래 셸과 달라집니다.