
タイトルの周りに関数でフレームを作成しようとしていますが、関数を呼び出すと常に関数が見つかりませんというメッセージが表示されます。なぜ動作しないのか見つかりません。
私が得るエラー:
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
非標準構文を使用しており、標準シェルを使用してスクリプトを実行しています。
function foo
Bashで標準でサポートされている関数のksh構文foo()
。
ただし、標準シェルでは2つの引数を使用してfunction foo {
コマンドを実行します。その名前のコマンドがないため、エラーが発生します。最後に、キーワードが開いている中かっこグループなしで表示された場合でも、構文エラーが発生します。function
foo
{
}
エラーメッセージの正確なスペルは/bin/sh
DebianとUbuntuで使用され、(主に)標準のPOSIX構文のみをサポートするDashを実行しているようです。
POSIX シェルでは POSIX 構文を使用でき、Bash 構文では Bash を使用できます。
{0..$length-3}
(私が知っている限り)これはどのシェルでも機能しないことに注意してください。たとえば、次を参照してください。Bashでは中括弧の拡張に整数変数を使用できますか?
for (( .. ))
Bash/ksh/zsh で使用できる一連の数字を繰り返すには、次のようにします。
for ((i = 0; i < length - 3; i++)) do
...
done