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