답변:
에서 이리 :
$# Stores the number of command-line arguments that
were passed to the shell program.
$? Stores the exit value of the last command that was
executed.
$0 Stores the first word of the entered command (the
name of the shell program).
$* Stores all the arguments that were entered on the
command line ($1 $2 ...).
"$@" Stores all the arguments that were entered
on the command line, individually quoted ("$1" "$2" ...).
그래서 기본적으로, $#
스크립트가 실행될 때 주어진 여러 가지 인수입니다. $*
모든 인수를 포함하는 문자열입니다. 예를 들어, $1
첫 번째 인수 등입니다. 스크립트의 특정 인수에 액세스하려는 경우 유용합니다.
Brian이 언급 한 것처럼 간단한 예제가 있습니다. 다음 명령을 실행하는 경우 :
./command -yes -no /home/username
$#
= 3 $*
= -yes -no /home/username
$@
= 배열 : {"-yes", "-no", "/home/username"}
$0
= ./command
, $1
= -yes
기타 이것들은 POSIX 표준 모든 준수 쉘이 지원해야합니다. 아래의 참고 자료는 각 특수 매개 변수에 대한 POSIX 표준 정의입니다. 세 가지 추가 변수가 있음을 유의하십시오. $-
, $$
과 $!
.
$@
:
하나부터 시작하여 위치 매개 변수로 확장됩니다. 확장이 큰 따옴표 내에서 발생하고 필드 분리가 발생하면 (see section 필드 분할 )가 수행 될 때, 각 위치 매개 변수는 별도의 필드로 확장되어야하며, 첫 번째 매개 변수의 확장은 원래 단어의 시작 부분과 결합되어야한다 (확장 된 매개 변수가 단어 내에 포함되었다고 가정). 마지막 매개 변수의 확장은 원래 단어의 마지막 부분과 조인되어야한다. 위치 매개 변수가 없으면 '@'의 확장은 '@'가 큰 따옴표로 묶여 있더라도 0 필드를 생성합니다.
$*
:
하나부터 시작하여 위치 매개 변수로 확장됩니다. 확장이 큰 따옴표로 묶인 문자열에서 발생하면 (see section 큰 따옴표 ), IFS 변수의 첫 문자로 분리 된 각 매개 변수의 값 또는 IFS가 설정되지 않은 경우 a로 단일 필드로 확장됩니다. IFS가 널 (NULL) 문자열로 설정된 경우, 이는 설정 해제와 동일하지 않습니다. 첫 번째 문자가 존재하지 않으므로 매개 변수 값이 연결됩니다.
$#
:
위치 매개 변수의 십진수로 확장됩니다. 명령 이름 (매개 변수 0)은 위치 매개 변수가 아닌 특수 매개 변수이기 때문에 '#'에 의해 주어진 수로 계산되지 않습니다.
$?
:
가장 최근의 파이프 라인의 십진수 종료 상태로 확장됩니다 ( 파이프 라인 ).
$-
:
(하이픈.) 현재 옵션 플래그 (문자열에 연결된 단일 문자 옵션 이름)를 호출시 지정된대로 확장합니다. 세트 특수 내장 명령 또는 암시 적으로 쉘에 의해 수행됩니다.
$$
:
호출 된 쉘의 10 진수 프로세스 ID로 확장됩니다. 서브 쉘 ( 셸 실행 환경 ), '$'는 현재 쉘과 동일한 값으로 확장됩니다.
$!
:
가장 최근의 백그라운드 명령의 10 진수 프로세스 ID로 확장됩니다 ( 기울기 )를 현재 셸에서 실행합니다. 예를 들어, 서브 쉘에서 실행 된 백그라운드 명령은 현재 쉘 환경의 "$!"값에 영향을주지 않습니다. 파이프 라인의 경우 프로세스 ID는 파이프 라인의 마지막 명령의 ID입니다.
$0
:
(제로.) 쉘 또는 쉘 스크립트의 이름으로 확장됩니다. 만나다 쉬 이 이름의 파생 방법에 대한 자세한 설명은
$*
과 $#
1) 환경 변수가 아닌 셸 변수입니다. 2) 표준화 (POSIX 사양의 일부)
"$@"
많은 시간은 다음과 같이 쓰여진다. ${1+"$@"}
(이식성을 이유로) stackoverflow.com/questions/743454/... 설명을 위해.