フラグがあると、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

関連情報