$ 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