質問

    

この質問にはすでに回答があります:

         

bashスクリプトで関数を作成しました。ただし、構文に不満があります。私は本当にそれが何なのか分かりません.....エラーメッセージは[:missing `] 'です

addem() {
            if [ $# -eq 0] || [ $# -gt 2 ]
            then
                    echo -1
            elif [ $# -eq 1 ]
            then
                    echo $[ $1 + $1 ]
            else
                    echo $[ $1 + $2 ]
            fi
    }
役に立ちましたか?

解決

最初の] の前にスペースが必要です。つまり:
変更:
if [$#-eq 0] || [$#-gt 2]
to:
if [$#-eq 0] || [$#-gt 2]

他のヒント

試してください:

if [ $# -eq 0 ] || [ $# -gt 2 ]

(0と]の間にスペースはありませんでした。)

indyK1ng:"#" " $"はコメントとして扱われません。次の文字をエスケープします。 " $#"現在のコンテキストに存在する位置パラメータの数を表す内部変数です。これはシェルスクリプトへのコマンドライン引数の数と考えることができますが、その配列は" set-[args]"を使用してリセットできます。組み込み。

Joakim Elofsson:ifステートメントの全体的な構造は正しい、&quot ;;" 「その後」の前にのみ必要です。 「&fi」の前それらが別の行にリストされていない場合。

問題は、" 0"とブラケット。 Bashでは、条件式を区切るために使用される角括弧は、式から少なくとも1つのスペースで区切られる必要があります。

        if [ $# -eq 0] || [ $# -gt 2 ]    # Wrong

        if [ $# -eq 0 ] || [ $# -gt 2 ]    # Correct

追加の注意事項として、2つの条件式を組み合わせることができます。演算子の関連付けにより、すべてが確実に機能します。

        if [ $# -eq 0 -a $# -gt 2 ]   # Even Better

私は、式の評価に二重括弧で提供される拡張機能を好む傾向があります。 2つの評価の組み合わせは、異なる演算子で行われることに注意してください。これはもっと読みやすいと思います。

        if [[ $# -eq 0 || $# -gt 2 ]]   # My preference

スクリプトでは、整数の加算に単一の括弧を使用することはお勧めしません。単一の括弧は、式をブール値に評価しています。整数演算には二重括弧が使用されます。

                echo $[ $1 + $1 ]   # Evaluation of an expression

                echo $(( $1 + $1 ))   # Integer math

Bashはスペースに敏感です。最初の行で、if [Y -eq X]を[Y -eq X]("]"の前のスペース)に置き換えます

以下に示すように、拡張テストコンストラクト(BASH)を使用します。文字の数が減り、読みやすさが向上すると思います(少なくともプログラマーにとっては)。 :-)

addem() { 
        if (( $# == 0 || $# > 2 )) 
        then 
                echo -1 
        elif (( $# == 1 )) 
        then 
                echo (( $1 + $1 )) 
        else 
                echo (( $1 + $2 ))
        fi 
 }

括弧を避け、代わりに test を使用する必要があります。

if test $# -eq 0 || test $# -gt 2
then
    echo -1
elif test $# -eq 1
then
    echo $(( $1 + $1 ))
else
    echo $(( $1 + $2 ))
fi

シェルスタイルの改善を取得すると、はるかに改善されます。 :)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top