ブラケットループ

ブラケットループ

タイトルの周りに関数でフレームを作成しようとしていますが、関数を呼び出すと常に関数が見つかりませんというメッセージが表示されます。なぜ動作しないのか見つかりません。

私が得るエラー:

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 fooBashで標準でサポートされている関数のksh構文foo()

ただし、標準シェルでは2つの引数を使用してfunction foo {コマンドを実行します。その名前のコマンドがないため、エラーが発生します。最後に、キーワードが開いている中かっこグループなしで表示された場合でも、構文エラーが発生します。functionfoo{}

エラーメッセージの正確なスペルは/bin/shDebianとUbuntuで使用され、(主に)標準のPOSIX構文のみをサポートするDashを実行しているようです。

POSIX シェルでは POSIX 構文を使用でき、Bash 構文では Bash を使用できます。

{0..$length-3}(私が知っている限り)これはどのシェルでも機能しないことに注意してください。たとえば、次を参照してください。Bashでは中括弧の拡張に整数変数を使用できますか?

for (( .. ))Bash/ksh/zsh で使用できる一連の数字を繰り返すには、次のようにします。

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

おすすめ記事