括号循环

括号循环

我即将围绕我的标题创建一个框架作为函数,但是当我调用该函数时,我总是收到一条消息,找不到函数。我找不到为什么它不起作用。

我得到的错误:

banner.sh: 3: function: not found
+-+
banner.sh: 11: Syntax error: "}" unexpected

代码片段:

function cover {
    length=${#1}
    echo -n '+'
    for i in {0..$length-3}
    do
        echo -n '-'
    done
    echo '+'
}

最后我会这样调用该函数:

cover
echo "previously declared string variable"

答案1

您正在使用非标准语法并使用标准 shell 运行脚本。

function foo是函数的 ksh 语法,Bash 支持它作为标准foo().

但在标准 shell 中,使用两个参数和function foo {运行命令。您没有具有该名称的命令,因此您会收到错误。最后,当关键字出现时没有左大括号组,因此也会出现语法错误。functionfoo{}

错误消息的确切拼写看起来像是您正在运行 Dash,/bin/sh在 Debian 和 Ubuntu 中使用,并且(大部分)仅支持标准 POSIX 语法。

可以在 POSIX shell 中使用 POSIX 语法,也可以在 Bash 语法中使用 Bash。

尽管请注意,这{0..$length-3}在任何 shell 中都不起作用(据我所知),请参阅例如在bash中,是否可以在大括号扩展中使用整数变量

要循环一组数字,您可以使用for (( .. ))(在 Bash/ksh/zsh 中):

for ((i = 0; i < length - 3; i++)) do
    ...
done

相关内容