쉘 스크립트에서 $*의 의미는 무엇입니까?

쉘 스크립트에서 $*의 의미는 무엇입니까?

쉘 스크립트 파일에서 "$*"를 보았습니다. 이는 무엇을 의미하며 언제 사용해야 합니까?

답변1

에서bash(1)

특수 매개변수

쉘은 여러 매개변수를 특별히 처리합니다. 이러한 매개변수는 참조만 가능합니다. 그들에게 할당하는 것은 허용되지 않습니다.

* 하나부터 시작하여 위치 매개변수로 확장됩니다. 큰따옴표 내에서 확장이 발생하면 IFS특수 변수의 첫 번째 문자로 구분된 각 매개변수의 값을 사용하여 단일 단어로 확장됩니다. 즉, "$*"는 와 동일합니다 "$1c$2c…". 여기서 c는 변수 값의 첫 번째 문자입니다 IFS. 가 설정되지 않은 경우 IFS매개변수는 공백으로 구분됩니다. null인 경우 IFS매개변수는 중간 구분 기호 없이 결합됩니다.

@ 하나부터 시작하여 위치 매개변수로 확장됩니다. 큰따옴표 내에서 확장이 발생하면 각 매개변수는 별도의 단어로 확장됩니다. 즉, "$@"와 동일합니다 "$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.

관련 정보