如何检查是否字符串在Bash shell中的空间(How to check if a string

2019-07-19 11:12发布

说一个字符串可能会像“AB‘’C‘’d”。 如何检查有字符串中所含的单/双引号和空间?

Answer 1:

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


Answer 2:

您可以使用在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 ]]

和引号不是双括号内必要的。 他们不能正确使用或正则表达式改变为一个字符串。



Answer 3:

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


Answer 4:

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


Answer 5:

你可以这样做,而不需要任何反斜线或外部命令:

# 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

有关:

  • 如何检查是否字符串包含在bash中的一种子


Answer 6:

便携式办法做到这一点是grep

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

...有点难看,但保证工作无处不在。



Answer 7:

如何类似的方法:

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



Answer 8:

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


Answer 9:

我不知道为什么没有人提到的[:空间:]设置。 通常你不会只关心检测空格字符。 我经常需要检测的任何空白,例如TAB。 该“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


Answer 10:

那这个呢:

[[ $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//[ \"]/_}  


Answer 11:

我知道这个线程创建9年前,但我想提出我的做法。 所有的答案,包括顶级的回答,似乎是额外的工作。 为什么没有办法简单地说...

echo "\"$var\""


文章来源: How to check if a string has spaces in Bash shell