2013-02-17 71 views
5

我想将参数传递给if语句中的函数,然后评估函数返回的内容(在bash中)。我得到的结果是不正确的。你如何正确地做到这一点?将参数传递给bash中的if语句中的函数

#!/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 

不想要的结果:

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

预先感谢您。 〜克里斯

回答

7

您可以return从功能的结果,或使用$()捕捉到它的输出:

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

非常感谢你! – user1117603 2013-02-17 10:02:00

0

不知道你想做什么?

foo()函数总是返回成功后,使用return

您传递给您的foo()函数第二个和第三个参数-eq 0但它们不使用。你想检查退出状态吗?这只是if foo $arg; then ..; fi

2

你确定你需要你的函数来回显0或1吗?它看起来更像是你想要的东西像

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 
相关问题