Je voudrais tester une valeur de retour de fonction bash dans une instruction if comme ceci:
if [[ func arg ]] ; then …
mais j'obtiens des messages d'erreur comme: opérateur binaire conditionnel attendu.
Quel est le bon moyen de le faire?
Est-ce:
if [[ $(func arg) ]] ; then ...
Si c'était le code de sortie et non le résultat que vous pourriez simplement utiliser
if func arg; then ...
Si vous ne pouvez pas faire en sorte que la fonction renvoie un code de sortie correct (avec return N
), et vous devez utiliser des résultats de chaîne, utilisez @Alex Gitelman answer.
$ help if
:
if: if COMMANDS; then COMMANDS; [ Elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi
Exécuter des commandes basées sur conditionnel.
Le
if COMMANDS
la liste est exécutée. Si son état de sortie est nul, lethen COMMANDS
la liste est exécutée. Sinon, chaqueElif COMMANDS
la liste est exécutée à son tour, et si son état de sortie est nul, lethen COMMANDS
list est exécutée et la commande if se termine. Sinon, la liste `else COMMANDS 'est exécutée, si elle est présente. L'état de sortie de la construction entière est l'état de sortie de la dernière commande exécutée, ou zéro si aucune condition n'est vérifiée.Exit Status: Renvoie l'état de la dernière commande exécutée.
Cette erreur semble se produire si la fonction renvoie plus d'un mot.
Par exemple, 1 2
.
Citez-le simplement:
"$(func arg)"
Échantillon:
$ if [[ 1 2 ]] ; then echo 1 ; fi
-bash: conditional binary operator expected
-bash: syntax error near `2'
$ if [[ "1 2" ]] ; then echo 1 ; fi
1
Et si vous comparez 0 vs non 0, utilisez simplement
if [[ "$(func arg)" != "0" ]]
Cela m'a été utile, donc j'ajouterais les détails suivants.
Si vous devez tester deux conditions, l'une étant l'état de sortie de la fonction/commande et l'autre par exemple valeur de variable utilisez ceci:
if func arg && [[ $foo -eq 1 ]]; then echo TRUE; else echo FALSE; fi