我试图在一个不区分大小写的while语句中编写一个比较.基本上,我只是想缩短以下内容,对用户提出是或否问题提示......
while[ $yn == "y" | $yn == "Y" | $yn == "Yes" | $yn == "yes" ] ; do
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
shopt -s nocasematch
while [[ $yn == y || $yn == "yes" ]] ; do
Run Code Online (Sandbox Code Playgroud)
要么 :
shopt -s nocasematch
while [[ $yn =~ (y|yes) ]] ; do
Run Code Online (Sandbox Code Playgroud)
[[是一个类似于(但比[命令更强大)的bash关键字.请参阅http://mywiki.wooledge.org/BashFAQ/031和http://mywiki.wooledge.org/BashGuide/TestsAndConditionals[[.=~的操作者[[评估针对右手扩展正则表达式(ERE)的左手字符串.成功匹配后,BASH_REMATCH可用于从模式中扩展匹配的组.正则表达式的引用部分成为字面意思.为了安全和兼容,将正则表达式放在参数中并执行[[ $string =~ $regex ]]无需使用 shopt 或正则表达式。执行此操作的最简单快捷的方法(只要您有 Bash 4):
if [ "${var1,,}" = "${var2,,}" ]; then
echo "matched"
fi
Run Code Online (Sandbox Code Playgroud)
您所做的就是将两个字符串都转换为小写并比较结果。