플래그가 있을 때 Bash가 입력을 받나요?

플래그가 있을 때 Bash가 입력을 받나요?

선택적 플래그와 입력이 있는 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

관련 정보