无限循环?似乎是由无害代码引起的

无限循环?似乎是由无害代码引起的

我有这个 bash 函数:

botch_get_prev_cd(){
    local dr=$(declare -f cd);
    local dr_trimmed="$(tr -d "$dr")"

    if [[ "$dr_trimmed" != *"run_botch"* ]]; then
        definition_prev_cd="prev_$dr"
        echo "$definition_prev_cd";
        eval "${definition_prev_cd}"
        unset definition_prev_cd  # clean up, no reason to leave this string around
        export -f prev_cd
    fi
}

当我调用它时,我的例程冻结了,看起来就像进入了无限循环。

当我将代码更改为此时,它会起作用:

botch_get_prev_cd(){
    local dr=$(declare -f cd);

    if [[ "$dr" != *"run_botch"* ]]; then
        definition_prev_cd="prev_$dr"
        echo "$definition_prev_cd";
        eval "${definition_prev_cd}"
        unset definition_prev_cd  # clean up, no reason to leave this string around
        export -f prev_cd
    fi
}

所以也许我不需要修剪空格来检查匹配的字符?我希望如此,因为第一个函数似乎不起作用,不知道为什么它似乎进入无限循环。

答案1

这不是无限循环,而是

tr -d "$dr"

等待输入。

我不确定你到底想在那里做什么;如果要使用tr从存储在变量中的值中删除字符,则需要为其指定值:

tr -d " " <<<"$dr"

将从存储在 中的值中删除所有空格dr

答案2

您的代码有一个问题是这一行

local dr_trimmed="$(tr -d "$dr")"

我假设这是要删除的$dr字符范围tr标准输入,但您忘记提供tr任何要处理的数据。所以它坐在那里等待一些人。

相关内容