IT story

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

hot-time 2020. 6. 8. 08:11
반응형

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


@쉘 스크립트 에서 달러 기호 뒤에 at 기호 ( )가 무엇을 의미합니까?

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

umbrella_corp_options $@

$@이다 모든 스크립트에 전달 된 매개 변수는.

예를 들어, 당신이 호출하면 ./someScript.sh foo bar다음 $@과 같아야합니다 foo bar.

당신이 할 경우 :

./someScript.sh foo bar

그런 다음 내부 someScript.sh참조 :

umbrella_corp_options "$@"

이것은 umbrella_corp_options큰 따옴표로 묶인 각 개별 매개 변수와 함께 전달되어 호출자로부터 공백이있는 매개 변수를 가져 와서 전달할 수 있습니다.


$@$*"모든 명령 행 인수"를 의미하는 거의 동일 합니다. 그들은 종종 모든 인수를 다른 프로그램에 전달하는 데 사용됩니다 (따라서 다른 프로그램 주위에 래퍼를 형성 함).

두 구문의 차이점은 공백이 포함 된 인수가 $@있고 큰 따옴표로 묶을 때 나타납니다.

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

매뉴얼에서 :

@

위치 매개 변수부터 시작하여 위치 매개 변수로 확장됩니다. 큰 따옴표 내에서 확장이 발생하면 각 매개 변수가 별도의 단어로 확장됩니다. 즉, "$ @"은 "$ 1" "$ 2"...와 같습니다. 큰 따옴표로 묶인 확장이 단어 내에서 발생하면 첫 번째 매개 변수의 확장은 원래 단어의 시작 부분과 결합됩니다. 마지막 매개 변수의 확장은 원래 단어의 마지막 부분과 결합됩니다. 위치 매개 변수가 없으면 "$ @"및 $ @는 아무것도 확장하지 않습니다 (즉, 제거됨).

참고 URL : https://stackoverflow.com/questions/9994295/what-does-mean-in-a-shell-script

반응형