Caso aceite ser caracteres vazios ou específicos

0

Fazendo alguns processamentos de mídia aqui:

case "$3" in
all)
  :
  ;;
[a-z][a-z][a-z])
  if [ "$2" == "subtitles" ]; then switches="$switches -s $3"
  if [ "$2" == "audio" ]; then switches="$switches -a $3"
  ;;
*)
  printf 'Invalid language code for language (should be 3-letter ISO-639 or "all"): %s\n' "$2"
  exit 1
  ;;
esac

Isso é para garantir que $3 seja all ou 3 letras entre a-z. Meu problema é que * faz meu comando falhar se $3 estiver vazio. Se eu removê-lo, posso continuar, mas não posso garantir que $3 seja all ou 3 letras entre a-z.

Como posso corrigir esse problema?

    
por Freedo 03.04.2018 / 19:28

1 resposta

4

Use o padrão

all|""

para corresponder a all ou a uma string vazia.

case "$3" in
    all|"") ;;
    [a-z][a-z][a-z])
        other-code ;;
    *)
        catch-all-code
esac
    
por 03.04.2018 / 19:41