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
'programing' 카테고리의 다른 글
C #에서 null 인 경우에도 개체의 소문자 이름을 가져 오는 방법 (0) | 2020.11.23 |
---|---|
데이터베이스의 비즈니스 로직과 코드? (0) | 2020.11.23 |
Xcode에서 개인 메서드의 단위 테스트 (0) | 2020.11.22 |
Java의 시간 상수? (0) | 2020.11.22 |
web2py를 사용하는 사람이 있습니까? (0) | 2020.11.22 |