You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中调用其他脚本/函数获取非数值返回值

Bash脚本传递非数值变量的实现方法

Bash的return命令仅支持返回0-255的数值,无法直接传递字符串。要实现非数值内容的传递,常用以下两种可靠方法:

方法一:通过标准输出(stdout)传递(推荐)

这种方法通过将需要传递的字符串输出到标准输出,再在调用脚本中用命令捕获该输出,不会污染当前shell环境,是最常用的方案。

修改后的sc1.sh

#!/bin/bash
function func_name() {
    var123="abcd123"
    # 将目标字符串输出到标准输出
    echo "$var123"
}
# 执行函数,触发输出
func_name

修改后的script2.sh

#!/bin/bash
# 用命令替换捕获sc1.sh的标准输出,赋值给var
var=$(./sc1.sh)
# 可选:验证结果
echo "获取到的值:$var"

注意事项

  • 确保sc1.sh中没有其他无关的echo输出,否则这些内容也会被一起捕获。如果需要保留调试信息,可以将其重定向到标准错误流:echo "调试日志" >&2,这样不会影响目标字符串的传递。
  • 执行前要给sc1.sh添加执行权限:chmod +x sc1.sh

方法二:通过环境变量传递(需注意环境污染)

如果需要传递多个变量,且可以接受调用脚本的环境被修改,可以用export导出环境变量,再通过source(或.)让sc1.sh在当前shell环境中运行。

修改后的sc1.sh

#!/bin/bash
function func_name() {
    var123="abcd123"
    # 导出变量到当前环境
    export var123
}
func_name

修改后的script2.sh

#!/bin/bash
# 用source执行sc1.sh,让其在当前shell环境中运行
. ./sc1.sh
# 直接读取导出的变量
var=$var123
# 可选:验证结果
echo "获取到的值:$var"

注意事项

  • 这种方式会将sc1.sh中所有的函数、变量都引入到script2.sh的运行环境中,可能引发命名冲突或意外的环境修改,仅在明确需求时使用。

内容的提问来源于stack exchange,提问作者user1666649

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:04:56