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

Bash递归函数变量修改失效原因及预期输出实现方法

问题原因
  • 参数传递被拆分:递归调用fun $var时未给$var加双引号,Bash会将变量内空格分隔的内容拆分为多个独立参数,导致每次递归中$1仅获取第一个"A",而非完整字符串,因此每次输出都是单个"A"。
  • 无递归终止条件:原代码没有设置停止递归的逻辑,会无限执行直到栈溢出。
实现预期输出的方法

需要两处修改:

  1. 递归调用时用双引号包裹参数,保证完整字符串传递
  2. 添加递归终止条件(可通过限制行数或字符串长度实现)

示例代码(限制输出5行)

fun() {
    local var="$1"
    local current_line="$2"

    # 达到指定行数后退出递归
    if [ "$current_line" -gt 5 ]; then
        return
    fi

    echo "$var"
    var="$var $var"
    fun "$var" $((current_line + 1))
}

fun "A" 1

无行数限制的实现(按字符串长度终止)

fun() {
    local var="$1"

    echo "$var"
    # 当字符串长度超过32时停止(可自行调整阈值)
    if [ ${#var} -gt 32 ]; then
        return
    fi
    var="$var $var"
    fun "$var"
}

fun "A"
修正后输出
A
A A
A A A A
A A A A A A A A
A A A A A A A A A A A A A A A A

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:50:25