Bash obtém entrada enquanto a bandeira está presente?

0

Estou escrevendo um script bash que possui sinalizadores opcionais, mas também uma entrada.

Não consigo obter a entrada como $1 porque, quando os sinalizadores estão presentes, a entrada é deslocada.

Por exemplo, se eu executar script.sh test , então $1 será igual ao teste.

Mas se eu executar script.sh -b test , então $1 será igual a -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;

A quantidade de sinalizadores que eu tenho não está definida, sei que adicionarei mais no futuro.

Como posso obter consistentemente o primeiro valor sem sinalização?

    
por Philip Kirkbride 27.03.2017 / 14:54

1 resposta

4

Você geralmente usa getopts como:

while getopts...; do
  # process options
  ...
done
shift "$((OPTIND - 1))"

printf 'First non-option argument: "%s"\n' "$1"

O shift acima descarta todos os argumentos da opção (incluindo o% arrastado -- , se houver) processado por getopts .

    
por 27.03.2017 / 14:58