셸 스크립트에서 $@는 무엇을 의미합니까?
달러 기호 뒤에 앳사인이 붙는 것은?@)는 셸 스크립트에서 의미합니까?
예를 들어 다음과 같습니다.
umbrella_corp_options $@
$@는 스크립트에 전달되는 모든 파라미터입니다.
예를 들어, 전화했을 경우./someScript.sh foo bar그리고나서$@와 동등할 것이다foo bar.
필요한 경우:
./someScript.sh foo bar
그리고 그 안에someScript.sh참조:
umbrella_corp_options "$@"
이것은 에 전달됩니다.umbrella_corp_options각 파라미터는 큰따옴표로 둘러싸여 있기 때문에 발신자로부터 공백이 있는 파라미터를 가져와 전달할 수 있습니다.
$@와 거의 같다$*둘 다 "모든 명령줄 인수"를 의미합니다.이들은 종종 모든 인수를 다른 프로그램에 단순히 전달하기 위해 사용됩니다(따라서 다른 프로그램 주위에 래퍼를 형성합니다).
두 구문의 차이는 공백이 있는 인수(예를 들어)가 있고 put이 있는 경우 표시됩니다.$@큰따옴표:
wrappedProgram "$@"
# ^^^ this is correct and will hand over all arguments in the way
# we received them, i. e. as several arguments, each of them
# containing all the spaces and other uglinesses they have.
wrappedProgram "$*"
# ^^^ this will hand over exactly one argument, containing all
# original arguments, separated by single spaces.
wrappedProgram $*
# ^^^ this will join all arguments by single spaces as well and
# will then split the string as the shell does on the command
# line, thus it will split an argument containing spaces into
# several arguments.
예: 발신
wrapper "one two three" four five "six seven"
결과는 다음과 같습니다.
"$@": wrappedProgram "one two three" four five "six seven"
"$*": wrappedProgram "one two three four five six seven"
^^^^ These spaces are part of the first
argument and are not changed.
$*: wrappedProgram one two three four five six seven
명령줄 인수는 다음과 같습니다.
$@=는 모든 인수를 문자열 목록에 저장합니다.
$*=는 모든 인수를 단일 문자열로 저장합니다.
$#=는 인수 수를 저장합니다.
퓨어 사용법$@는 대부분의 경우 "가능한 한 프로그래머를 설득한다"는 의미입니다.대부분의 경우 단어 구분, 공백 및 인수 내 기타 문자와 관련된 문제로 이어지기 때문입니다.
전체 사례의 99%는 다음을 포함시켜야 합니다.":"$@"인수에 대해 확실하게 반복하기 위해 사용할 수 있는 것입니다.
for a in "$@"; do something_with "$a"; done
의미.
즉, 발신자에서 함수 또는 스크립트로 전달된 인수로 확장됩니다.의미는 컨텍스트에 따라 달라집니다.함수 내에서는 해당 함수에 전달되는 인수로 확장됩니다.스크립트(함수 외부)에서 사용되는 경우 해당 스크립트에 전달되는 인수로 확장됩니다.
$ cat my-script
#! /bin/sh
echo "$@"
$ ./my-script "Hi!"
Hi!
$ put () { echo "$@"; }
$ put "Hi!"
Hi!
* 주의: 단어 분할.
셸은 의 내용을 기반으로 토큰을 분할합니다.IFS환경 변수입니다.기본값은 다음과 같습니다. \t\n; 즉, 공백, 탭 및 줄바꿈입니다.확장"$@"는 전달된 인수의 원래 복사본을 제공합니다.확장$@아닐지도 모른다.보다 구체적으로는 에 존재하는 문자를 포함하는 인수IFS둘 이상의 인수로 분할되거나 잘릴 수 있습니다.
따라서 대부분의 경우 사용하고 싶은 것은"$@",것은 아니다.$@.
@
1부터 시작하여 위치 매개변수로 확장합니다.큰따옴표 내에서 확장이 발생하는 경우 각 파라미터는 별도의 단어로 확장됩니다.즉, "$@"는 "$1" "$2"에 해당합니다.단어 내에서 쌍따옴표로 둘러싸인 전개는 첫 번째 파라미터의 전개는 원래 워드의 시작 부분과 결합되고 마지막 파라미터의 전개는 원래 워드의 마지막 부분과 결합된다.위치 파라미터가 없는 경우 "$@" 및 "$@"는 0으로 확장됩니다(즉, 삭제됩니다.
$@는 기본적으로 셸 스크립트의 모든 명령줄 인수를 참조합니다. $1 , $2 , $3첫 번째 명령줄 인수, 두 번째 명령줄 인수, 세 번째 인수를 참조합니다.
이들은 종종 단순히 모든 인수를 다른 프로그램에 전달하기 위해 사용됩니다.
[root@node1 shell]# ./my-script hi 11 33 hi 11 33 [root @node 1 ]
언급URL : https://stackoverflow.com/questions/9994295/what-does-mean-in-a-shell-script
'programing' 카테고리의 다른 글
| bash 스크립트의 다른 명령어로 파라미터를 전송하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
|---|---|
| EXCEL VBA 항목이 비어 있는지 '스페이스'가 아닌지 확인합니다. (0) | 2023.04.22 |
| 문서의 행 수를 세는 방법 (0) | 2023.04.22 |
| SignalR과 RESTful API를 모두 통합할 수 있습니까? (0) | 2023.04.22 |
| 여기서 Properties의 데이터는 다음과 같습니다.설정.기본 저장 여부 (0) | 2023.04.17 |