Bash 在存在标志时获取输入?

Bash 在存在标志时获取输入?

我正在编写一个 bash 脚本,它有可选的标志,还有一个输入。

我无法获取输入,$1因为当存在标志时输入会发生变化。

例如,如果我运行script.sh test那么$1将等于测试。

但如果我运行script.sh -b test那么$1将等于-b。

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

相关内容