我正在尝试检查长度为1的字符串是否只有以下字符:[RGWBO]。
我正在尝试以下但是它不起作用,我错过了什么?
if [[ !(${line[4]} =~ [RGWBO]) ]];
答案 0 :(得分:2)
这就是你想要的:
if [[ ${line[4]} =~ ^[RGWBO]+$ ]];
这意味着从开始到结束的字符串必须具有[RGWBO]字符一次或多次。
如果您想否定表达式,请在!
前面使用[[ ]]
:
if ! [[ ${line[4]} =~ ^[RGWBO]+$ ]];
或者
if [[ ! ${line[4]} =~ ^[RGWBO]+$ ]];
答案 1 :(得分:1)
这个适用于任何可用的Bash版本:
[[ -n ${LINE[0]} && ${LINE[0]} != *[^RGWB0]* ]]
即使我更喜欢扩展球的简单性:
shopt -s extglob
[[ ${LINE[0]} == +([RGWBO]) ]]
答案 2 :(得分:0)
${#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
答案 3 :(得分:0)
使用expr
(表达式评估程序)执行substring matching。
#!/bin/bash
pattern='[R|G|W|B|O]'
string=line[4]
res=`expr match "$string" $pattern`
if [ "${res}" -eq "1" ]; then
echo 'match'
else
echo 'doesnt match'
fi