Shift: 글로벌 버전이 있나요?

Shift: 글로벌 버전이 있나요?

매개변수 목록을 구문 분석하기 위해 일반적인 하향식 구문 분석 방식을 구현하려고 했습니다.

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 ...]

쉘 옵션 및 위치 매개변수의 값을 설정하거나 설정 해제합니다.

쉘 속성과 위치 매개변수의 값을 변경하거나 쉘 변수의 이름과 값을 표시합니다.

[...]

-- 나머지 인수를 위치 인수에 할당합니다. 남은 매개변수가 없으면 위치 매개변수가 설정 해제됩니다.

관련 정보