bash: Por que estão () causando erro no script, mas não na linha de comando?

0

Se eu digitar isso na linha de comando:

_longopt ()
{
    case "$prev" in
        --+([-a-z0-9_]))
            echo foo
        ;;
    esac;
}

funciona como esperado.

Se eu colocá-lo em um script (foo.sh), ele falhará:

./foo.sh: line 6: syntax error near unexpected token '('
./foo.sh: line 6: '        --+([-a-z0-9_]))'

Por quê?

E mais importante: dado que eu tenho uma função já definida como a acima, como posso convertê-la automaticamente em uma função que funciona em um script?

$ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
    
por Ole Tange 28.06.2016 / 09:26

1 resposta

1

Você precisa:

shopt -s extglob

Obrigado @ Stéphane Chazales por me apontar no extglob.

    
por 28.06.2016 / 09:37