인수 목록을 구문 분석하기 위해 일반적인 하향식 구문 분석 체계를 구현하려고 했습니다.
eat()
왜 내 기능이 작동하지 않는지 궁금했습니다 . 위치 인수 $1, $2, $3, ...가 해당 특정 함수의 컨텍스트에 있기 때문입니다. 실제 스크립트의 내용이 아닙니다. 버머. 나는 아직 bash에 익숙해지지 않았습니다.
그래서 내 질문은 만약 그것이 옳다면 변화의 범위도 내 eat()
기능의 맥락이라는 것입니다. 그렇죠?
실제로 다른 함수 내부에서 스크립트 인수를 이동할 수 있는 방법이 없나요? : (
[즉, Case 문에서 모든 논리(일반적으로 하향식 파서를 준수함)를 구현해야 함을 의미합니다! (!?)]
답변1
함수는 전달된 인수의 전체(또는 하위 집합)를 반환할 수 있으며(예: 전역 배열을 통해) 호출 스크립트는 이를 사용하여 자체 인수를 설정할 수 있습니다. 예를 들어
#!/bin/bash
declare -a args
nofoo() {
# we don't like "--foo", it is forbidden!
for a in "$@"; do
[ "$a" != "--foo" ] && args+=("$a")
done
}
nofoo "$@"
set -- "${args[@]}"
help set
Bash에서 :
세트:
set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
쉘 옵션 및 위치 매개변수의 값을 설정하거나 설정 해제합니다.
쉘 속성 및 위치 매개변수의 값을 변경하거나 쉘 변수의 이름 및 값을 표시하십시오.
[...]
--
나머지 인수를 위치 매개변수에 할당합니다. 남은 인수가 없으면 위치 매개변수가 설정 해제됩니다.