【问题标题】:Passing arguments to a function within an if statement in bash在bash中的if语句中将参数传递给函数
【发布时间】:2013-02-17 09:45:30
【问题描述】:

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

【问题讨论】:

    标签: bash shell unix


    【解决方案1】:

    您确定需要您的函数来回显 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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 如果我在 if 语句中使用 && 或 || 的多个函数怎么办?在这种情况下,这不起作用。
      • @7heViking 那么肯定更喜欢return 形式,但不是捕获输出,而是检查返回值。基本上,if foo "$arg"; then(还要注意对参数的正确引用)。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-08-31
        • 2015-08-23
        • 2019-11-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-26
        • 2021-10-05
        • 2019-08-04
        相关资源
        最近更新 更多