将参数传递给bash中if语句中的函数

时间:2013-02-17 09:45:31

标签: bash shell unix

我试图将参数传递给if语句中的函数,然后评估函数返回的内容(在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

不是预期的结果:

cknight@macbook:~/work$ ./test.sh
0
entered 0
1
entered 0

提前谢谢你。 〜克里斯

3 个答案:

答案 0 :(得分:8)

您可以return来自您的函数的结果,也可以使用$()来捕获其输出:

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

答案 1 :(得分: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

答案 2 :(得分:0)

不确定你想做什么......

您的foo()函数始终成功返回,请使用return

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