如何在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
相关产品推荐
相关产品推荐

