这个Bash脚本如何工作?

时间:2017-12-08 01:30:50

标签: regex bash

read -r -p "Are you sure? [y/N] " response
 if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]
then
 do_something
else
 do_something_else
fi

我在堆栈溢出网站上看到这个脚本我使用了下面的脚本,因为我自己写不了因为它丢了错误。我知道这个脚本将等待用户输入,例如y / n,但我想详细解释这个脚本的工作原理,如=~做什么以及^([yY][eE][sS]|[yY])+$ ]]做什么。

1 个答案:

答案 0 :(得分:1)

if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]

[[ ]]是一个基础测试语句,类似于[ ],但有一些差异。有关详细信息,请参阅man bash

=~执行RegEx匹配,

^([yY][eE][sS]|[yY])+$

是正则表达式,代表 yyes的一个或多个组合,不区分大小写

它实际测试用户的输入是yYesyESYyyY还是YyyYYesyesyes(或其他匹配的内容)给定的RegEx)。

来自man 1 bash

  

可以使用另外的二元运算符=〜,其优先级与==和!=相同。使用它时,操作符右侧的字符串被视为扩展正则表达式并相应地匹配(如regex(3)中所示)。

  

[[表达]]

     

根据条件表达式表达式的评估,返回0或1的状态。