rencontre “opérateur unaire attendu” dans le script bash

dans mon script bash, j'ai une fonction pour renvoyer 0 ou 1(vrai ou faux) pour la fonction principale de l'état.

function1 () { 
    if [[ "" =~ "^ ...some regexp... $" ]] ; then
        return 1
    else
        return 0
    fi 
}

puis, dans ma fonction principale:

main () { 
    for arg in ${@} ; do
        if [ function1 ${arg} ] ; then
            ...
        elif [ ... ] ; then
            ...
        fi
    done
}

cependant, lorsque j'ai exécuté ce script, il m'a toujours donné un msg d'erreur "[: fonction1: opérateur unaire attendu"

quelqu'un peut m'aider s'il vous plaît?

Notez que, au moins dans bash, version 4, vous ne devez pas citer l'expression régulière: en faisant cela, les forces de simple correspondance de chaîne -- documentée ici. Aussi, vous devez utiliser for arg in "$@" avec les guillemets, ou plus simple for arg; do ...
Vous devriez mettre votre regex dans une variable. pattern='^ ...some regexp... $'; if [[ $1 =~ $pattern ]]. Notez qu'à l'intérieur de doubles crochets, il n'est pas nécessaire de citer les variables et que glenn a dit, la regex (variable) ne doivent jamais être cité.

OriginalL'auteur GJ. | 2012-05-14