首页 > 解决方案 > bash中的'while'循环:不理解行为

问题描述

我想强制人们在收到提示后传递某个字符串:

while [[ ! ${task} =~ "up|down" ]]; do
    echo $task
    read -p "Task to conduct? [up|down] " input
    task=$input
done

尽管传递了正确的字符串,但我仍然收到提示:

Task to conduct? [up|down] down
down
Task to conduct? [up|down] up
up
Task to conduct? [up|down] 

我想念什么?

标签: bashloops

解决方案


您需要删除正则表达式周围的双引号。看起来他们正在阻止扩张。这适用于我的盒子

#!/usr/bin/env bash
while [[  ! ${task} =~ ^(up|down)$ ]]; do
    read -p "Task to conduct? [up|down] " input
    task=$input
done

推荐阅读