bash --- 구문 분석 플래그 및 예상(선택 사항이 아닌) 인수

bash --- 구문 분석 플래그 및 예상(선택 사항이 아닌) 인수
$ bash file.sh expected_arg -f optional_arg

$1다음을 사용하여 첫 번째 매개변수를 얻는 방법이 언급된 일부 게시물을 보았습니다.

플래그 매개변수를 구문 분석하기 위해 getopts를 사용하는 방법에 대한 게시물입니다. 아직 이 두 가지 문제를 모두 다루는 게시물을 본 적이 없습니다.

현재 을(를) expected_arg통해 방문 중 입니다 $1.

나는 -f그 깃발을 전혀 감당할 수 없습니다. 내 테스트 스크립트에도 다음이 있습니다.

#!/bin/bash

dirname=$1

[[ -z  $dirname  ]] && echo "Project name required as an argument." && return

# get flags
verbose='false'
aflag='false'
bflag='false'
files='false'
while getopts 'abf:v' flag; do
  case "${flag}" in
    a) aflag='true' ;;
    b) bflag='true' ;;
    f) files="${OPTARG}" ;;
    v) verbose='true' ;;
    *) error "Unexpected option ${flag}" ;;
  esac
done

echo "$files"

echo "$HOME/Desktop/$dirname"

exit

터미널에 다음이 표시됩니다.

Jills-MBP:~ jillr$ bash test.sh blah -f file
false
/Users/jillr/Desktop/blah

~하지 않는 한다음과 같이 매개변수의 순서를 전환합니다.

bash file.sh -f optional_arg expected_arg

터미널 출력:

Jills-MBP:~ jillr$ bash test.sh -f file blah
file
/Users/jillr/Desktop/-f

따라서 당연히 -f는 로 처리되는데 $1이는 내가 원하는 것이 아닙니다. 예상 매개변수를 가져와야 합니다.

필수 제약조건:

  • 다양한 수의 플래그를 허용해야 합니다(없음부터 여러 개까지). 따라서 예상_arg의 위치가 달라집니다.
  • Expected_arg가 필요합니다.
  • 예상되는 매개변수를 구문 분석하기 위해 다른 플래그를 사용하는 것을 피하고 싶습니다(예: 이와 같은 작업을 피하고 싶습니다 $ bash test.sh -f file -d blah).

이러한 제한사항을 어떻게 충족할 수 있나요?

답변1

그것은 중요하지 않습니다. 이 게시물을 찾았습니다.옵션이 아닌 매개변수 뒤의 옵션을 구문 분석하려면 getopts를 사용하세요.

shift이는 기본적으로 dirname=$1 뒤에 배치하면 문제를 해결할 수 있음을 의미합니다.

이렇게 하면 입력 매개변수가 허용됩니다.

$ bash file.sh expected_arg -f optional_arg

관련 정보