9

我试图在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
4

3 回答 3

10

您可以return从函数中获取结果,也可以$()用于捕获其输出:

if [ $(foo $arg) -eq 0 ] ; then
于 2013-02-17T09:48:15.050 回答
3

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

foo() {
  if [ $1 = "zero" ]; then
    return 0
  else 
    return 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
于 2013-02-17T15:54:17.917 回答
0

不知道你想做什么...

你的foo()函数总是成功返回,使用return.

foo()您将第二个和第三个参数传递给您的函数,-eq 0但它们没有被使用。是否要检查退出状态?那简直了if foo $arg; then ..; fi

于 2013-02-17T09:54:56.043 回答