programing

셸 스크립트에서 $@는 무엇을 의미합니까?

kakaobank 2023. 4. 22. 09:49
반응형

셸 스크립트에서 $@는 무엇을 의미합니까?

달러 기호 뒤에 앳사인이 붙는 것은?@)는 셸 스크립트에서 의미합니까?

예를 들어 다음과 같습니다.

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

반응형