所以我想验证 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] 进行比较时出现了问题。基本上我正在验证用户输入。
并且 caivar1
像我一样重新分配,var1=$response
或者我必须再次使用 set >
答案1
您可能的意思是!~
“与正则表达式不匹配”,而不是!=
“不等于”。
对于$var =~ regexp
和$var !~ regexp
,不应引用右侧的模式。对于==
和!=
,您可以引用右侧的部分(事实上我鼓励这样做)。
由于!=
需要一个字符串,因此 "[yY]
不会被解析为正则表达式。相反,shell 将其扩展为“名称为y
或Y
" 的任何文件。由于您没有一个文件,因此 shell 会抱怨。
顺便说一句,这类事情就是为什么我不喜欢在 tcsh 中编写脚本的原因,尽管我使用它作为交互式 shell。