CシェルパラメータIf Elseループ

CシェルパラメータIf Elseループ

スクリプトの後に1つ以上のパラメータを入力すると、そのパラメータが表示されるスクリプトを作成しています。パラメータを入力していない場合は、「1つ以上のパラメータを入力してください」と表示されます。

何らかの理由で、私のスクリプトは最初のタスクを実行しますが、スクリプトの0パラメータタスクは実行しません。私は何が間違っていましたか?これは単に論理的なエラーですか?

foreach arg ( $* )
        if ( $#arg == 0 ) then
                echo "Please enter one or more arguments."
        else if ( $#arg > 0 ) then
                echo "Found argument = $arg"
        endif
end

ベストアンサー1

スクリプトにパラメータがない場合、$ *は何も同じではないため、何もしません。

あなたのスクリプトは実際には次のようになります。

foreach arg (  )
   echo "Nothing to see here"
end

何がより合理的ですか?

# check how many arguments passed to script
if ( $#argv == 0 ) then
     echo "Please enter one or more arguments."
     exit 1
endif

foreach arg ( $* )
    echo "Found argument = $arg"
end

おすすめ記事