쉘 스크립트 파일에 "$*"가 표시됩니다. 이는 무엇을 의미하며 언제 사용해야 합니까?
답변1
~에서bash(1)
…
특수 매개변수
쉘은 여러 매개변수를 특별히 처리합니다. 이러한 매개변수는 참조용일 뿐이며 이에 대한 할당은 허용되지 않습니다.
*
1부터 시작하는 위치 매개변수로 확장됩니다. 큰따옴표 내에서 확장이 발생하면 단일 단어로 확장되며 각 인수의 값은IFS
특수 변수의 첫 번째 문자로 구분됩니다. 즉, c가 변수 value 의 첫 번째 문자인 것과"$*"
동일합니다 . 설정하지 않으면 매개변수가 공백으로 구분됩니다. null 인 경우 매개변수는 구분 기호를 삽입하지 않고 연결됩니다."$1c$2c…"
IFS
IFS
IFS
@
1부터 시작하는 위치 매개변수로 확장됩니다. 큰따옴표 내에서 확장이 발생하면 각 인수가 별도의 단어로 확장됩니다. 즉,"$@"
와 같습니다"$1" "$2" …
. 단어 내에서 큰따옴표 확장이 발생하는 경우 첫 번째 인수의 확장은 원래 단어의 시작 부분과 연결되고 마지막 인수의 확장은 원래 단어의 마지막 부분과 연결됩니다. 위치 인수가 없으면"$@"
확장은$@
비어 있습니다(즉, 제거됩니다).
기본적으로 $*
값이 스크립트(또는 쉘 함수)에 대한 인수인 특수 변수입니다. 대부분의 경우 "$@"
더 적합합니다.
답변2
이는 스크립트에 전달된 모든 매개변수에 해당합니다. 귀하의 예에서는 따옴표로 묶여 있습니다. 따옴표는 인수 사이의 공백을 캡슐화하기 때문에 중요합니다. 쉘 스크립트에서 따옴표를 생략하면 종종 오류가 발생합니다.
맨페이지에서 발췌한 bash를 예로 들어 보겠습니다.
* Expands to the positional parameters, starting from one. When the expansion occurs
within double quotes, it expands to a single word with the value of each parameter
separated by the first character of the IFS special variable. That is, "$*" is
equivalent to "$1c$2c...", where c is the first character of the value of the IFS
variable. If IFS is unset, the parameters are separated by spaces. If IFS is null,
the parameters are joined without intervening separators.
건배
SC.