在 linux shell 脚本中,需用 echo 或 printf 向 stdout 输出内容,再通过 $() 捕获赋值给变量;return 仅返回 0–255 状态码,不可传字符串;多行或含空格输出时须用 "$var" 引用。

在 Linux Shell 脚本中,将函数的输出结果赋值给变量,主要通过命令替换(command substitution)实现。关键在于让函数产生标准输出(stdout),然后用 $() 或反引号 `...` 捕获它。
确保函数有明确的 stdout 输出
函数本身不返回“值”,而是通过 echo、printf 等命令向 stdout 打印内容,脚本才能捕获。返回值(return)只能是 0–255 的整数,用于表示执行状态,不能传字符串或复杂数据。
- ✅ 正确做法:用
echo输出要赋值的内容 - ❌ 错误做法:仅靠
return "hello"—— 这会报错,return只接受数字
使用 $() 将函数输出赋值给变量
这是推荐方式,语法清晰、嵌套方便、可读性强。
示例:
myfunc() {
echo "Hello from function"
}
<p>result=$(myfunc)
echo "$result" # 输出:Hello from function
</p>
处理多行输出或带空格的内容
如果函数输出含换行符或前后空格,需注意变量引用时的引号和 IFS 设置:
- 始终用双引号包裹变量:
"$result",防止单词拆分和路径展开 - 若函数输出多行,变量会完整保存换行符,
echo "$result"仍能正确显示 - 避免未加引号的
echo $result,否则换行变空格、多余空白被压缩
函数内可结合逻辑与输出
函数可以包含条件判断、计算等操作,最后用 echo 输出最终结果:
get_user_home() {
local user=$1
if id "$user" &>/dev/null; then
echo "$(getent passwd "$user" | cut -d: -f6)"
else
echo ""
fi
}
<p>home_dir=$(get_user_home "alice")
if [ -n "$home_dir" ]; then
echo "Home directory: $home_dir"
fi
</p>











