我即将围绕我的标题创建一个框架作为函数,但是当我调用该函数时,我总是收到一条消息,找不到函数。我找不到为什么它不起作用。
我得到的错误:
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 {
运行命令。您没有具有该名称的命令,因此您会收到错误。最后,当关键字出现时没有左大括号组,因此也会出现语法错误。function
foo
{
}
错误消息的确切拼写看起来像是您正在运行 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