だから私は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=$response
setを再利用する必要があります。 >
答え1
!~
おそらく、「等しくない」ではなく、「正規表現と一致しない」という意味だったでしょう!=
。
$var =~ regexp
との場合は、$var !~ regexp
右のパターンを参照しないでください。==
との場合、!=
右側の部分を引用できます(実際にはこれをお勧めします)。
!=
文字列が予想されるため、 "は正規表現[yY]
として解析されません。代わりに、シェルは "またはy
"Y
という名前のファイルに展開されます。ファイルがないため、シェルは文句を言います。
ところで、これが私がtcshをインタラクティブシェルとして使用してもスクリプトを書くのが好きではない理由です。