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

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

인수 목록을 구문 분석하기 위해 일반적인 하향식 구문 분석 체계를 구현하려고 했습니다.

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 setBash에서 :

세트:set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

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

쉘 속성 및 위치 매개변수의 값을 변경하거나 쉘 변수의 이름 및 값을 표시하십시오.

[...]

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

관련 정보