是否有任何简单的方法可以检查Bash中所有yes/no选项的可能性?

是否有任何简单的方法可以检查Bash中所有yes/no选项的可能性?,bash,awk,aix,Bash,Awk,Aix,我正在尝试实现一个检查,检查不同的是/否的可能性。下面的代码可以很好地工作,但有没有简单的方法可以做到这一点 注意:我使用的是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 您根本不需要调用awk。您可以利用

我正在尝试实现一个检查,检查不同的是/否的可能性。下面的代码可以很好地工作,但有没有简单的方法可以做到这一点

注意:我使用的是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

您根本不需要调用
awk
。您可以利用全球化:

read -p "Using dest path :${DESTPATH}" flag

if [[ $flag != [yY]* ]]; then
     echo "Exiting...";
     exit 1
fi

[yY]*
将匹配任何以
y
y
typeset-l标志开头的字符串,然后再读取:
您只需要检查小写

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

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

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

注意
-l
标记到
排版
是在
Bash
4中引入的。
-l
很方便
-u
是大写的等效值(但是,如上所述,需要Bash 4+)。还要注意,Bash更喜欢
声明
而不是
排版
——后者被认为是过时的。(
ksh
,相比之下,只识别
排版
)。谢谢回复。但我尝试了更多与正则表达式的组合,以使其更可靠。但有些地方出了问题。如果[$flag!=[yY][(eE |)][(sS |)]];然后
case $flag in [Yy]* | sure | absolumatively)
    ;;
  *)
    echo Exiting
    exit 1;; 
esac