如何检查字符串是否在Bash shell中有空格

时间:2009-09-24 20:30:34

标签: bash shell string

说一个字符串可能就像“a b''c''d”。如何检查字符串中是否包含单/双引号和空格?

11 个答案:

答案 0 :(得分:26)

您可以在bash中使用正则表达式:

string="a b '' c '' d"
if [[ "$string" =~ \ |\' ]]    #  slightly more readable: if [[ "$string" =~ ( |\') ]]
then
   echo "Matches"
else
   echo "No matches"
fi

修改

出于上述原因,最好将正则表达式放在变量中:

pattern=" |'"
if [[ $string =~ $pattern ]]

在双方括号内不需要引号。它们不能在右侧使用,或者正则表达式更改为文字字符串。

答案 1 :(得分:24)

case "$var" in  
     *\ * )
           echo "match"
          ;;
       *)
           echo "no match"
           ;;
esac

答案 2 :(得分:9)

[[ "$str" = "${str%[[:space:]]*}" ]] && echo "no spaces" || echo "has spaces"

答案 3 :(得分:8)

string="a b '' c '' d"
if [ "$string" == "${string//[\' ]/}" ]
then 
   echo did not contain space or single quote
else
   echo did contain space or single quote
fi

答案 4 :(得分:6)

您可以执行此操作,而无需任何反斜杠或外部命令:

# string matching

if [[ $string = *" "* ]]; then
  echo "string contains one more spaces"
else
  echo "string doesn't contain spaces"
fi

# regex matching

re="[[:space:]]+"
if [[ $string =~ $re ]]; then
  echo "string contains one or more spaces"
else
  echo "string doesn't contain spaces"
fi

相关:

答案 5 :(得分:4)

执行此操作的便携方式是使用grep

S="a b '' c '' d"
if echo $S | grep -E '[ "]' >/dev/null
then
  echo "It's a match"
fi

......有点难看,但保证可以在任何地方工作。

答案 6 :(得分:2)

类似的方法如何:

$ A="some string"; echo $A | grep \  | wc -l
1
$ A="somestring"; echo $A | grep \  | wc -l
0

答案 7 :(得分:1)

function foo() {
    echo "String: $*"
    SPACES=$(($#-1))
    echo "Spaces: $SPACES"
    QUOTES=0
    for i in $*; do
        if [ "$i" == "'" ]; then
            QUOTES=$((QUOTES+1))
        fi
    done
    echo "Quotes: $QUOTES"
    echo
}

S="string with spaces"
foo $S
S="single' 'quotes"
foo $S
S="single '' quotes"
foo $S
S="single ' ' quotes"
foo $S

的产率:

String: string with spaces
Spaces: 2
Quotes: 0

String: single' 'quotes
Spaces: 1
Quotes: 0

String: single '' quotes
Spaces: 2
Quotes: 0

String: single ' ' quotes
Spaces: 3
Quotes: 2

答案 8 :(得分:0)

我想知道为什么没人提到[:space:]集。通常你不仅对检测空间特征感兴趣。我经常需要检测任何空白区域,例如标签。 “grep”示例如下所示:

$ echo " " | egrep -q "[:space:]" && echo "Has no Whitespace" || echo "Has Whitespace"
Has Whitespace
$ echo "a" | egrep -q "[:space:]" && echo "Has no Whitespace" || echo "Has Whitespace"
Has no Whitespace

答案 9 :(得分:0)

那呢:

[[ $var == ${var//[ \"]/_} ]] && echo "quotes or spaces not found"

或者如果您喜欢这样:

if [[ $var == ${var//[ \"]/_} ]] ; then  
   echo "quotes or spaces not found" 
else
   echo "found quotes or spaces"
fi

说明: 我正在使用下划线对所有引号和空格进行动态无损字符串替换后,评估变量$ {var}与变量$ {var}本身之间的比较。

示例:

${var// /_}  # Substitute all spaces with underscores

以下代码用下划线替换方括号(空格和引号)之间的所有字符。请注意,引号必须使用反斜杠进行保护:

${var//[ \"]/_}  

答案 10 :(得分:-1)

我知道这个线程是9年前创建的,但是我想提供我的方法。所有答案,包括最高答案,似乎都是多余的工作。为什么不简单地使用它……

echo "\"$var\""