$
Bash에서 (달러 기호)로 시작하는 몇 가지 특수 매개변수를 발견했습니다 .
예를 들어 종료 상태를 알고 싶을 때 $?
프로세스 ID를 얻으려면 를 사용했습니다.$$
.
특별한 Bash(쉘) 매개변수와 사용법은 무엇입니까?
답변1
인용하다3.4.2 특수 매개변수~에서배쉬 참조 매뉴얼.
특수 매개변수:
*
(
$*
)는 1부터 시작하는 위치 인수로 확장됩니다. 확장이 큰따옴표 안에 있지 않으면 각 위치 인수가 별도의 단어로 확장됩니다. 이러한 단어는 실행되는 컨텍스트에서 단어 분할 및 경로 이름 확장이 추가로 적용됩니다. 큰따옴표 내에서 확장이 발생하면 단일 단어로 확장되며 각 인수의 값은IFS
특수 변수의 첫 번째 문자로 구분됩니다. 즉, 다음과"$*"
같습니다."$1c$2c…"
씨변수 value 의 첫 번째 문자입니다IFS
. 설정하지 않으면IFS
매개변수가 공백으로 구분됩니다. null 인 경우IFS
매개변수는 구분 기호를 삽입하지 않고 연결됩니다.
@
(
$@
)는 1부터 시작하는 위치 인수로 확장됩니다. 큰따옴표 내에서 확장이 발생하면 각 인수가 별도의 단어로 확장됩니다. 즉,"$@"
와 같습니다"$1" "$2" …
. 단어 내에서 큰따옴표 확장이 발생하는 경우 첫 번째 인수의 확장은 원래 단어의 시작 부분과 연결되고 마지막 인수의 확장은 원래 단어의 마지막 부분과 연결됩니다. 위치 인수가 없으면"$@"
확장은$@
비어 있습니다(즉, 제거됩니다).
#
(
$#
)는 소수 위치 인수의 수로 확장됩니다.
?
(
$?
)는 가장 최근에 실행된 전경 파이프의 종료 상태로 확장됩니다.
-
(
$-
하이픈) 호출 시 지정된 현재 옵션 플래그, 내장 명령set
또는 쉘 자체에 의해 설정된 옵션 플래그(예: 옵션) 로 확장됩니다-i
.
$
(
$$
)는 쉘의 프로세스 ID로 확장됩니다. 서브셸 에서는()
서브셸이 아닌 호출 셸의 프로세스 ID로 확장됩니다.
!
( )는 비동기 명령으로 실행되든 내장 명령을
$!
사용하든 상관없이 가장 최근에 백그라운드에 넣은 작업의 프로세스 ID로 확장됩니다 (참조:bg
작업 제어 내장).
0
(
$0
)는 쉘 또는 쉘 스크립트의 이름으로 확장됩니다. 이는 쉘이 초기화될 때 설정됩니다. 명령 파일을 사용하여 Bash를 호출하는 경우(참조쉘 스크립트),$0
파일 이름으로 설정합니다. Bash가 이 옵션으로 시작되면-c
(참조배쉬에게 전화하기)$0
실행될 문자열 뒤의 첫 번째 인수(있는 경우)로 설정됩니다. 그렇지 않으면 인수 0으로 지정된 대로 Bash를 호출하는 데 사용되는 파일 이름으로 설정됩니다.
이는 Bash 매뉴얼 페이지에서도 인쇄할 수 있습니다:
$ man bash | awk '/Special Parameters$/','/Shell Variables$/'
같은 상기와POSIX에 정의된 특수 매개변수.
또한, 쉘이나 현재 함수에 대한 명령줄 매개변수를 포함하는 위치 매개변수 $1
, , ... 가 있습니다($2
3.4.1 위치 매개변수). 이는 또한 POSIX 기능이기도 합니다.
이전 버전의 Bash도 $_
특수 매개변수로 나열되었지만 이제는 셸에서 설정한 다른 변수와 함께 나열됩니다(5.2 배쉬 변수). $_
POSIX가 아니며 다른 쉘에서는 이를 지원하지 않을 수 있습니다.
_
(
$_
, 밑줄.) 쉘이 시작되면 환경 또는 인수 목록에 전달된 쉘을 호출하는 데 사용되는 절대 경로 이름 또는 실행 중인 쉘 스크립트로 설정하십시오. 그런 다음 확장 후 이전 명령의 마지막 인수로 확장됩니다. 또한 실행된 각 명령을 호출하고 해당 명령으로 내보낸 환경에 배치하는 데 사용되는 전체 경로 이름으로 설정됩니다. 메일을 확인할 때 이 매개변수는 메일 파일의 이름을 보유합니다.
답변2
~에 따르면Bash 스크립팅 가이드.
프로세스 ID(PID)스크립트 자체. $$ 변수는 "고유한" 임시 파일 이름을 구성하기 위해 스크립트에서 자주 사용됩니다. echo $$
스크립트 내에서 실행 하면 출력에 현재 셸과 다른 PID가 있음을 알 수 있습니다.