说一个字符串可能就像“a b''c''d”。如何检查字符串中是否包含单/双引号和空格?
答案 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\""