【问题标题】:Syntax for OR condition in bash while loopbash while 循环中 OR 条件的语法
【发布时间】:2018-01-21 07:11:23
【问题描述】:

我尝试了许多不同的组合,包括括号、引号、||-o,但脚本在没有无限循环的情况下工作的唯一方法是在 while 循环比较中没有 OR,如下所示:while [ $name != Jorge ]] ; do ... 这是一个我要运行的脚本示例:

#!/bin/bash
echo "What is my name: "
read name

while [ $name != "Jorge" ] || [ $name != "Eduardo" ] ; do    
    echo "Not. Try again: "
    read name
done

echo "Well done!"

【问题讨论】:

  • 我建议用&&替换||
  • 由于您使用的是bash,因此您也可以使用正则表达式运算符while [[ ! $name =~ ^(Jorge|Eduardo)$ ]]; do

标签: bash while-loop


【解决方案1】:

你应该在while语句的条件下使用&&而不是||

您正在尝试从标准输入读取一个名称,如果该名称是“Jorge”或“Eduardo”,那么您就完成了。当将其置于 while 条件下时,如果名称不是“Jorge”并且名称不是“Eduardo”,您希望继续循环。

如果名称不是“Jorge”名称不是“Eduardo”,您当前的条件是继续循环。而且名字不能同时是两个。

【讨论】:

【解决方案2】:

使用正则表达式:

while [[ ! "$name" =~ ^(Jorge|Eduardo)$ ]]; do

或 Bash extented globbing:

shopt -s extglob
while [[ "$name" != @(Jorge|Eduardo) ]]; do

【讨论】:

猜你喜欢
  • 2018-06-03
  • 1970-01-01
  • 2018-03-20
  • 2010-11-20
  • 2022-07-25
  • 2022-11-12
  • 2011-10-23
  • 1970-01-01
  • 2017-08-19
相关资源
最近更新 更多