如何使 Bash 函数返回值

本文介绍了在Bash编程中,如何让函数返回值,尽管Bash函数通常不直接返回值。作者提供了两种方法:一是利用标准输出流通过echo或printf命令,二是使用全局变量。作者推荐使用标准输出流避免全局变量带来的潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:https://itsfoss.com/bash-function-return-value/
交流群:在这里插入图片描述

与其他编程语言不同,Bash 中的函数不返回任何值。相反,它返回退出状态或一个数字值(介于 1 和 255 之间),表示执行的成功或失败。

但问题在于如何让 Bash 函数返回值。

当然,如果我写这个教程,我必须有一个解决方案(或者说变通方法)来解决这个问题,但在此之前,让我们首先了解问题。

我们正在处理的问题
首先,让我分享一个简单的 C 程序,来解释编程语言如何通过 bash 函数返回值:

// Function declaration with return type int
int add(int x, int y) {
    return x + y;
}

int main() {
    // Call the function and store the result in a variable
    int result = add(3, 4);

    // Print the result
    printf("%d\n", result);

    return 0;
}

如果你运行上面的 C 程序,它会返回 7 ,如下所示:

How functions in C programs returns value

在上面的 C 程序中,我创建了一个名为 add 的函数,它接受两个值,并使用 return 语句来相加这两个值。

不幸的是,bash 中的函数不是这样工作的,它们给出的是函数中使用的最后一个命令的退出状态,退出状态可以是 0(成功)或非零(失败)。

在 bash 中有一个特殊的变量 $? 用于获取退出状态。所以让我快速分享一下你可以如何使用它:

#!/bin/bash

# Defining the function
function test {
  echo "A demo function created to check the exit status"
}

# Calling function
test

# Checking the status
echo "The exit status of the test is: $?"

Check the exit status in bash

正如你所见,它返回 0 表示函数已成功执行!

现在,让我们看看如何使 bash 函数返回值。

如何使 bash 函数返回一个值

有两种方法可以使 bash 函数返回一个值:

  • 使用标准输出数据流(涉及使用 echo 或 print 命令)
  • 使用全局变量

当然,这与在 C 或其他编程语言中返回值不同,但在许多情况下可能会对您有所帮助。

所以让我们从第一个开始。

方法 1:使用标准输出数据流

如果你不了解数据流,Linux 中有 3 种数据流:输入、输出和错误。每个都用于不同的任务。

如标题所示,在这种方法中我将使用 echo 或 printf 命令来使用标准输出数据流。

仍然感到困惑吗?简单来说,我将把函数的输出发送到标准输出数据流以打印输出(这就是 printf 或 echo 命令的用法所在)。

首先,让我分享一个 Bash 脚本:

#!/bin/bash

# Function definition
function demo {
  local namaste="Greetings from Bash!"
  echo "${namaste}"
}

# Call the function and capture its output
output=$(demo)

# Print the captured output
echo "${output}"  

当执行时,它将给出以下输出:

Use the standard output data stream to make the bash function return value

现在,让我们看看解释部分。

首先,我创建了一个函数 demo ,其中有一个局部变量 namaste ,其中包含我想要打印的字符串。

后来,我使用 echo 命令打印了 namaste 变量内的数据。

在接下来的部分中,我调用了 $() 概念内的函数,该函数将在子 shell 中执行 demo 函数,并且输出被 output 变量捕获。

最后,echo 命令被用来打印 ouptut 变量的捕获输出。

相当容易。对吧?

方法 2:使用全局变量

默认情况下,bash 中的每个变量都是全局的,要使用局部变量,必须在分配任何值之前使用术语 local

但问题是如何在 bash 函数中使用全局变量返回值。好吧,让我展示一个简单的 bash 脚本,用于此目的使用全局变量:

#!/bin/bash

# Global variable to store the result
output=""

# Function definition
function generate_greeting {
  local name=$1  # Function parameter

  # Assign the greeting to the global variable
  output="Hello, ${name}!"
}

# Call the function with a name as an argument
generate_greeting "$USER"

# Access the global variable
echo "${output}"

以上脚本简单地向当前登录的用户问候,当您执行以上脚本时,您可以期望以下输出:

Use global variable to make the bash function return value

现在,让我们分解脚本。

首先,声明了空的全局变量 output

然后,创建了一个名为 generate_greeting 的函数,它接受一个参数 name ,在接下来的一行中,将带有用户名的问候文本分配给了 output 变量。

接下来,脚本将调用函数 generate_meeting 并使用 $USER 参数来获取当前登录用户的名字。

最后,使用 echo 命令打印了全局变量 output 的值。

是的,这就是在 bash 中使用全局变量使函数返回值所需的全部。

该使用哪种方法?(在我看来)

我个人不喜欢使用全局变量来使 bash 函数返回一个值,而且有一个简单的原因。

全局变量的特性是可以在脚本的任何地方进行访问和修改,这可能会引起麻烦,特别是如果脚本很复杂,并且可能在用户之间发生变化。

我建议使用第一种方法,它利用标准输出数据流。

希望你会觉得这个指南有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值