![Bash에서 ${@}는 무엇인가요? [복사]](https://linux55.com/image/193568/Bash%EC%97%90%EC%84%9C%20%24%7B%40%7D%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
최근에는 Linux에서 bash 명령, 특히 문자열 작업을 배우고 있습니다. 와 동일하게 선언된 지역 변수가 있습니다 ${@}
. 그 뜻 은 이해해요$n
N명령에 제공된 명령줄 인수입니다. 하지만 요점은 무엇입니까 ${@}
?
주어진 명령은 다음과 같습니다:
local instr;
instr="${@}";
답변1
Bash(및 모든 POSIX 유사 쉘) 에서 $@
또는${@}
"특수 매개변수"모든 위치 인수(= 명령줄 인수) 목록으로 확장됩니다. $*
그것은 비슷하다큰따옴표공백으로 구분된 모든 위치 인수를 포함하는 문자열이 아닌 개별 토큰 목록으로 확장됩니다 (1) .
(1) 실제로 매개변수는 "공백"으로 명시적으로 연결되지 않고 첫 번째 문자( $IFS
예:입력 필드 구분 기호변수이지만 많은 쉘에서는 기본값이 "space"입니다. 다음 텍스트에서는 단순함을 위해 "공간"을 계속 사용하고 $IFS
기본값을 유지하거나 필요에 따라 변경하지만 무엇을 하려는지 알고 있다고 가정합니다.
그래서,
"$*"
"$1 $2 $3 ... "
"단어" 와 동등 하고 간주되는 반면,"$@"
"$1" "$2" "$3" ...
"여러 개별 단어"와 동일하며 취급됩니다.
따옴표가 없으면 둘 다 공백으로 구분된 단어 목록일 뿐입니다. 아래와 같이 명령줄 인수 자체가 공백이 있는 문자열인 경우 이러한 구별이 중요해집니다.
./my_script.sh parameter1 parameter2 "a whole sentence as parameter"
$*
또는$@
따옴표 없이는 7개의 개별 토큰 목록으로 확장됩니다. 이것은 당신이 원하는 경우가 거의 없습니다."$*"
공백으로 구분된 7개의 단어( )parameter1 parameter2 a whole sentence as parameter
로 구성된 토큰 으로 확장됩니다. 이것은 대부분의 시간입니다아니요당신은 무엇을 원합니까?"$@"
3개의 토큰 목록으로 확장됩니다. 처음 두 개는 공백이 포함된 문자열parameter1
이고parameter2
마지막은 공백입니다 .a whole sentence as parameter
이는 대부분의 경우, 특히 마커 목록으로 사용하려는 경우(반복, 배열에 할당 또는 사용자 정의 함수에 전달) 필요한 것입니다.
특히 쉘 변수 인용 및 토큰화의 미묘함에 관해 더 자세히 읽으려면 다음을 참조하는 것이 좋습니다.