我正在尝试检查长度为 1 的字符串是否只有以下字符:[RGWBO]。
我正在尝试以下但它不起作用,我错过了什么?
if [[ !(${line[4]} =~ [RGWBO]) ]];
我正在尝试检查长度为 1 的字符串是否只有以下字符:[RGWBO]。
我正在尝试以下但它不起作用,我错过了什么?
if [[ !(${line[4]} =~ [RGWBO]) ]];
这就是你想要的:
if [[ ${line[4]} =~ ^[RGWBO]+$ ]];
这意味着从开始到结束的字符串必须有 [RGWBO] 字符一次或多次。
如果你想否定表达式,只需!
在前面使用[[ ]]
:
if ! [[ ${line[4]} =~ ^[RGWBO]+$ ]];
或者
if [[ ! ${line[4]} =~ ^[RGWBO]+$ ]];
这适用于任何可用的 Bash 版本:
[[ -n ${LINE[0]} && ${LINE[0]} != *[^RGWB0]* ]]
尽管我更喜欢扩展 glob 的简单性:
shopt -s extglob
[[ ${LINE[0]} == +([RGWBO]) ]]
${#myString}
,如果等于 1 则继续步骤 2;re='[RGWBO]';
while read -r line; do
if (( ${#line} == 1 )) && [[ $line == $re ]]; then
echo "yes: $line"
else
echo "no: $line"
fi
done < test.txt
您可能想查看以下链接:
${#myString}
;${myString:0:8}
;该test.txt
文件包含这个
RGWBO
RGWB
RGW
RG
R
G
W
B
O
V