쉘 스크립트의 args 배열에서 $* 할당

쉘 스크립트의 args 배열에서 $* 할당

쉘 매개변수를 반복하고 원하지 않는 매개변수를 배열로 필터링한 후 배열을 다시 할당하고 싶습니다 $*.

-f java예를 들어 아래 스크립트에서는 매개변수를 순서대로 제거하고 나머지 매개변수를 args배열 에 저장하고 싶습니다 . 필터링된 매개변수를 다시 할당할 수 있는 방법이 있습니까 $*?

이렇게 하려고 하는데 set --${*} $args전체 배열 대신 첫 번째 인수만 사용합니다.

내가 합격하면

$ .test.sh arg1 arg2 -f java7 arg3 
arg1 arg2 agr3 
while (( $# )); do
    if [[ $1 = "-f" ]] && [[ $2 = "java7" ]]; then
        unset USE_JAVA8
        JAR=signals.jar
        echo "USE_JAVA8 Flag is OFF running Signal on java7"
        shift 2
        continue
    fi

    args+=( "$1" )
    shift
done


set --${*} $args

echo $*

답변1

bash쉘을 사용한다고 가정하면 이는 , 즉 배열의 첫 번째 요소 $args와 같습니다 .${args[0]}args

위치 인수 목록을 배열 값으로 설정하려면 args다음을 사용할 수 있습니다.

set -- "${args[@]}"

이렇게 "${args[@]}"정확하게 인용해야 합니다. 그렇지 않으면 배열의 개별 요소가 쉘에 의해 여러 단어와 파일 이름으로 분할될 수 있습니다. "$*"(작은 따옴표로 묶인 문자열) 또는 (개별적으로 따옴표로 묶인 문자열 목록) 을 사용하는 경우에도 "$@"같은 이유로 따옴표를 사용해야 합니다.

또한 관련:


zsh셸 에서 set -- $args위치 인수 목록은 배열의 요소 목록으로 올바르게 설정될 수 있습니다 args.

관련 정보