매개변수 목록을 구문 분석하기 위해 일반적인 하향식 구문 분석 방식을 구현하려고 했습니다.
eat()
내 기능이 작동하지 않는 이유를 알고 싶습니다 . 위치 매개변수 $1, $2, $3, ...가 해당 특정 기능의 컨텍스트에 있기 때문입니다. 실제 스크립트의 내용이 아닙니다. 정말 나쁘다. 나는 아직 배쉬에 익숙하지 않습니다.
그래서 내 질문은, 만약 그것이 맞다면, 교대근무의 범위는 또한 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
배쉬 에서 :
놓다:
set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
쉘 옵션 및 위치 매개변수의 값을 설정하거나 설정 해제합니다.
쉘 속성과 위치 매개변수의 값을 변경하거나 쉘 변수의 이름과 값을 표시합니다.
[...]
--
나머지 인수를 위치 인수에 할당합니다. 남은 매개변수가 없으면 위치 매개변수가 설정 해제됩니다.