선택적 플래그와 입력이 있는 bash 스크립트를 작성 중입니다.
$1
플래그가 있으면 입력이 변경되므로 입력을 얻을 수 없습니다 .
예를 들어, 실행하면 script.sh test
테스트 $1
와 같습니다.
그러나 실행하면 script.sh -b test
-b $1
와 같습니다.
while getopts 'bh' flag; do
case "${flag}" in
b) boxes= 'true' ;;
h) echo "options:"
echo "-h, --help show brief help"
echo '-b add black boxes for monjaro'
;;
*) error "Unexpected option ${flag}" ;;
esac
done
echo $1;
내가 가지고 있는 플래그 수는 아직 설정되지 않았으며 앞으로 더 추가할 것이라는 것을 알고 있습니다.
플래그가 아닌 첫 번째 값을 항상 얻으려면 어떻게 해야 합니까?
답변1
일반적으로 다음을 사용합니다 getopts
.
while getopts...; do
# process options
...
done
shift "$((OPTIND - 1))"
printf 'First non-option argument: "%s"\n' "$1"
위의 명령은 처리된 모든 옵션 매개변수( 있는 경우 shift
꼬리 포함)를 삭제합니다 .--
getopts