programing

Bash에서 "$ @"와 "$ *"의 차이점은 무엇입니까?

nasanasas 2020. 11. 23. 08:13
반응형

Bash에서 "$ @"와 "$ *"의 차이점은 무엇입니까?


이 질문에 이미 답변이 있습니다.

둘 다 모든 명령 줄 인수를 저장하는 것 같습니다.

그래서 둘 사이에 차이점이 있습니까?


차이는 미묘합니다. 변수로 "$*"구분 된 하나의 인수를 생성 하고 별도의 인수로 확장합니다. 예를 들어 다음을 고려하십시오.$IFS"$@"

for i in "$@"; do echo "@ '$i'"; done
for i in "$*"; do echo "* '$i'"; done

여러 인수로 실행하는 경우 :

./testvar foo bar baz 'long arg'
@ 'foo'
@ 'bar'
@ 'baz'
@ 'long arg'
* 'foo bar baz long arg'

자세한 사항은:

http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters

$*

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

$@

하나부터 시작하여 위치 매개 변수로 확장됩니다. 큰 따옴표 안에 확장이 발생하면 각 매개 변수가 별도의 단어로 확장됩니다. 즉, "$@"동등 "$1" "$2" ....이중 인용 확장 단어 내에서 발생하는 경우, 상기 제 파라미터의 확장은 일본어 단어의 시작 부분에 접합되고, 최종 파라미터의 확장은 기존의 마지막 부분에 접합되고 워드. 거기에는 위치 매개 변수가 없을 때 "$@"$@아무것도 확장 (즉, 그들은 제거된다).


내 POV 와의 주요 차이점 "$@"은 원래 인수 수 유지 한다는 것 입니다. 그렇게 하는 유일한 형태입니다.

예를 들어, my_script 파일에 다음이 포함 된 경우 :

#!/bin/bash

main()
{
   echo 'MAIN sees ' $# ' args'
}

main $*
main $@

main "$*"
main "$@"

### end ###

다음과 같이 실행합니다.

my_script 'a b c' d e

이 출력을 얻을 것입니다.

MAIN sees  5  args
MAIN sees  5  args
MAIN sees  1  args
MAIN sees  3  args

참고 URL : https://stackoverflow.com/questions/3008695/what-is-the-difference-between-and-in-bash

반응형