変数を大文字と小文字で比較

変数を大文字と小文字で比較

だから私はtcshスクリプトでユーザーの応答を確認したいと思い、これが私が今まで持っていることです。

set var1="temp"
    while($var1 != [yY] && $var1 != [Yy][Ee][Ss] && $var1 != [Nn] && $var1 != [Nn][Oo])
            echo "Do you want to create a backup directory ? :"
        set response=&< 
        if ($response == [yY] || $respose == [Yy][Ee][Ss]) then
            mkdir backup
            echo "Backupd directory created \n"
        else if($response == [nN] || $response == [Nn][Oo]) then
            echo "No backup directory is created \n"
        else
            echo "Please enter a valid respose ! \n"
            var1=$response
        endif 
    end

デフォルトでは、ユーザーはY、y、Yes、N、n、Noを入力したいが、もちろんyesとnowでは小文字と大文字の組み合わせも許可します。

しかし、スクリプトを実行するとエラーが発生します。[yY]: No match.

そのため、$ var1を[Yy]と比較すると問題が発生すると推測します。デフォルトでは、ユーザー入力を検証しています。

そしてvar1私のように再割り当てしない場合は、var1=$responsesetを再利用する必要があります。 >

答え1

!~おそらく、「等しくない」ではなく、「正規表現と一致しない」という意味だったでしょう!=

$var =~ regexpとの場合は、$var !~ regexp右のパターンを参照しないでください。==との場合、!=右側の部分を引用できます(実際にはこれをお勧めします)。

!=文字列が予想されるため、 "は正規表現[yY]として解析されません。代わりに、シェルは "またはy"Yという名前のファイルに展開されます。ファイルがないため、シェルは文句を言います。

ところで、これが私がtcshをインタラクティブシェルとして使用してもスクリプトを書くのが好きではない理由です。

関連情報