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])+$ ]]
做什么。
答案 0 :(得分:1)
if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]
[[ ]]
是一个基础测试语句,类似于[ ]
,但有一些差异。有关详细信息,请参阅man bash
。
=~
执行RegEx匹配,
^([yY][eE][sS]|[yY])+$
是正则表达式,代表 y
和yes
的一个或多个组合,不区分大小写。
它实际测试用户的输入是y
,Yes
,yES
,YyyY
还是YyyYYesyesyes
(或其他匹配的内容)给定的RegEx)。
来自man 1 bash
:
可以使用另外的二元运算符=〜,其优先级与==和!=相同。使用它时,操作符右侧的字符串被视为扩展正则表达式并相应地匹配(如
regex(3)
中所示)。
[[表达]]
根据条件表达式表达式的评估,返回0或1的状态。