将变量与大小写字母进行比较

将变量与大小写字母进行比较

所以我想验证 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 将其扩展为“名称为yY" 的任何文件。由于您没有一个文件,因此 shell 会抱怨。

顺便说一句,这类事情就是为什么我不喜欢在 tcsh 中编写脚本的原因,尽管我使用它作为交互式 shell。

相关内容