【问题标题】:Is there any simple way to check all possibilities of yes/no option in Bash?有没有简单的方法来检查 Bash 中是/否选项的所有可能性?
【发布时间】:2015-06-19 21:51:14
【问题描述】:

我正在尝试检查是/否的不同可能性。下面的代码工作正常,但有什么简单的方法可以做到这一点。

注意:我使用的是 bash 版本 2.02.0。

read -p "Using dest path :${DESTPATH}" flag;
OPT=$(echo $flag|awk '{print tolower($0)}')
if [[ ${OPT:0:1} != 'y' ]]; then
     echo "Exiting..."; return
fi

【问题讨论】:

    标签: bash awk aix


    【解决方案1】:

    您根本不需要致电awk。您可以利用 globbing:

    read -p "Using dest path :${DESTPATH}" flag
    
    if [[ $flag != [yY]* ]]; then
         echo "Exiting...";
         exit 1
    fi
    

    [yY]* 将匹配任何以yY 开头的字符串

    【讨论】:

    • 感谢您的回复。但我正在尝试更多与正则表达式的组合,以使其更可靠。但是出了点问题。如果 [[ $flag != [yY][(eE|)][(sS|)] ]];那么
    【解决方案2】:
    case $flag in [Yy]* | sure | absolumatively)
        ;;
      *)
        echo Exiting
        exit 1;; 
    esac
    

    这可移植到传统和 POSIX sh。如果您使用的是 Bash 版本 4,则可以检查 ${flag,,} 以将值标准化为小写。

    【讨论】:

      【解决方案3】:

      typeset -l flag 阅读前: 你只需要检查小写。

      @anubhava 答案是正确的,使用排版和更改是可选的。

      typeset -l flag
      read -p "Using dest path :${DESTPATH}" flag
      if [[ $flag != y* ]]; then
           echo "Exiting...";
           exit 1
      fi
      

      【讨论】:

      • 请注意,typeset-l 标志是在 bash 4 中引入的。
      • -l 很方便; -u 是大写的等价物(但如前所述,需要 Bash 4+)。另请注意,Bash 更喜欢 declare 而不是 typeset - 后者被认为已过时。 (相比之下,ksh识别typeset)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多