String

將變數與大小寫字母進行比較

  • January 24, 2016

所以我想在 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 >

您可能的意思是!~“不匹配正則表達式”,而不是!=“不等於”。

對於$var =~ regexpand $var !~ regexp,右邊的模式不應該被引用。對於==and !=,您可以引用右邊的部分(事實上我鼓勵這樣做)。

由於!=需要一個字元串,“”[yY]沒有被解析為正則表達式。相反,shell 將其擴展為“名稱為yor的任何文件Y。由於您沒有文件,因此 shell 抱怨。

順便說一句,這種事情就是為什麼我不想在 tcsh 中編寫腳本,即使我將它用作我的互動式 shell。

引用自:https://unix.stackexchange.com/questions/257128