(Bash) 쉘의 특수 매개변수/변수는 무엇입니까?

(Bash) 쉘의 특수 매개변수/변수는 무엇입니까?

$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, , ... 가 있습니다($23.4.1 위치 매개변수). 이는 또한 POSIX 기능이기도 합니다.

이전 버전의 Bash도 $_특수 매개변수로 나열되었지만 이제는 셸에서 설정한 다른 변수와 함께 나열됩니다(5.2 배쉬 변수). $_POSIX가 아니며 다른 쉘에서는 이를 지원하지 않을 수 있습니다.

  • _

    ( $_, 밑줄.) 쉘이 시작되면 환경 또는 인수 목록에 전달된 쉘을 호출하는 데 사용되는 절대 경로 이름 또는 실행 중인 쉘 스크립트로 설정하십시오. 그런 다음 확장 후 이전 명령의 마지막 인수로 확장됩니다. 또한 실행된 각 명령을 호출하고 해당 명령으로 내보낸 환경에 배치하는 데 사용되는 전체 경로 이름으로 설정됩니다. 메일을 확인할 때 이 매개변수는 메일 파일의 이름을 보유합니다.

답변2

~에 따르면Bash 스크립팅 가이드.

프로세스 ID(PID)스크립트 자체. $$ 변수는 "고유한" 임시 파일 이름을 구성하기 위해 스크립트에서 자주 사용됩니다. echo $$스크립트 내에서 실행 하면 출력에 현재 셸과 다른 PID가 있음을 알 수 있습니다.

관련 정보