2013-02-17 9 views
5

Sto provando a passare argomenti a una funzione all'interno di un'istruzione if e quindi a valutare cosa restituisce la funzione (in bash). Il risultato che ottengo è errato. Come lo fai correttamente?Passare argomenti a una funzione all'interno di un'istruzione if in bash

#!/bin/bash 

foo() { 
    if [ $1 = "zero" ]; then 
     echo "0" 
    else 
     echo "1" 
fi 
} 

arg="zero" 
if foo $arg -eq 0 ; then 
    echo "entered 0" 
else 
    echo "entered something else" 
fi 

arg="blah" 
if foo $arg -eq 0 ; then 
    echo "entered 0" 
else 
    echo "entered something else" 
fi 
Non

i risultati desiderati:

[email protected]:~/work$ ./test.sh 
0 
entered 0 
1 
entered 0 

Grazie in anticipo. ~ Chris

risposta

7

È possibile return un risultato da vostra funzione o utilizzare $() per catturare la sua uscita:

if [ $(foo $arg) -eq 0 ] ; then 
+0

Grande grazie !! – user1117603

0

non sicuro di quello che vuoi fare ...

La funzione foo() sempre rendimenti con successo, utilizzare return.

Si passa alla funzione foo() un secondo e un terzo parametro -eq 0 ma non vengono utilizzati. Vuoi controllare lo stato di uscita? Questo è semplicemente if foo $arg; then ..; fi.

2

Sei sicuro di aver bisogno della funzione per echo 0 o 1? Sembra più che tu voglia qualcosa come

foo() { 
    if [ $1 = "zero" ]; then 
    return 0 
    else 
    echo 1 
    fi 
} 

# Or even just simply foo() { [ $1 = "zero ]; } 

arg="zero" 
if foo $arg; then 
    echo "entered 0" 
else 
    echo "entered something else" 
fi 

arg="blah" 
if foo $arg; then 
    echo "entered 0" 
else 
    echo "entered something else" 
fi 
Problemi correlati