$*는 쉘에서 무엇을 의미합니까?

$*는 쉘에서 무엇을 의미합니까?

$*쉘에서 그것은 무엇을 의미합니까?

두 가지 함수에 대한 코드가 있으며 run_command다음 run_test과 같이 호출됩니다.

if [ -n "`echo ${GOAT_COMMANDS} | grep $1`" ]; then
  run_command $*
else
  run_test $*
fi

이것이 무엇을 의미하는지 이해하고 싶지만 $*Google은 이런 종류의 검색을 제대로 수행하지 못합니다.

답변1

$*모든 매개변수스크립트나 함수의 경우 인수를 공백으로 구분하세요.

기능이 있는 경우:

foo() {
    for x in $*
    do
        echo $x
    done
}

그런 다음 실행하면 foo 1 "2 3 4" 5다음이 출력됩니다.

1
2
3
4
5

즉, 인용된 문자열은 "2 3 4"세 개의 개별 "단어"로 분할됩니다.

때를아니요인수를 별도의 단어로 분리하려면 를 사용할 수 있습니다 . 대신 $@동일한 함수를 사용하면 다음이 출력됩니다."$@"$*

1
2 3 4
5

즉, 인용된 문자열이 별도의 단어로 분할되지 않습니다. 이는 모든 위치 매개변수를 명시적으로 나열하는 것과 같습니다 "$1" "$2" "$3" "$4" .... 일반적으로 이것은 아마도 여러분이 사용하고 싶은 것일 것입니다. 단어 분할은 종종 추적하기 어려운 불쾌한 오류로 이어집니다.

함수 내부가 아닌 스크립트의 최상위 수준에서 이는 스크립트 자체에 제공된 인수를 참조합니다.

run_command귀하의 예에서는 일부 또는 run_test모든 인수를 사용하여 이 스크립트 또는 함수를 호출하고 이를 별도의 단어로 분할합니다. 스크립트가 script.sh "hello world" 2 3다음과 같이 실행되면 다음과 같은 효과가 나타납니다.

run_command hello world 2 3

답변2

$*모든 매개변수를 단일 "인수"로 함수에 전달하는 것을 의미합니다. 또한 이러한 변수 주위에는 큰따옴표를 사용하는 것이 좋습니다 "$*".

이에 대한 일부 문서여기섹션 3.2.5

반면에 매개변수 목록에 포함된 각 매개변수를 반복해야 하는 경우 $@다음 예와 같이 대신 사용하세요.

for var in "$@"
do
    echo "$var"
done

또 다른 예는 다음과 같습니다. foo.sh

#!/bin/bash    
foo1()
{
        for x in "$@"
        do
                echo "f1: $x"
        done
}

foo2()
{
        for x in "$*"
        do
                echo "f2: $x"
        done
}

foo1 1 2 "3 4 5" 6 7
echo
foo2 1 2 "3 4 5" 6 7

산출:

$  ./foo.sh 
f1: 1
f1: 2
f1: 3 4 5
f1: 6
f1: 7

f2: 1 2 3 4 5 6 7

답변3

$*모두를 의미위치 매개변수.

답변4

$*위치 매개변수 목록이지만 단어 분할 기능이 있습니다. 예를 들어,

your_script ab "cd ef"

$*ab, cd및 3개의 매개변수가 제공됩니다 ef. (단어 분할을 원하지 않는 한) 사용하는 것이 "$@"더 안전합니다 .

관련 정보