說一個字符串可能像「a b」'c「'd」,我該如何檢查字符串中是否包含單/雙引號和空格?如何檢查一個字符串是否在bash shell中有空格
回答
怎麼樣類似的方法:
$ A="some string"; echo $A | grep \ | wc -l
1
$ A="somestring"; echo $A | grep \ | wc -l
0
?
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
便攜式辦法做到這一點是grep
:
S="a b '' c '' d"
if echo $S | grep -E '[ "]' >/dev/null
then
echo "It's a match"
fi
...有點難看,但保證工作無處不在。
使用grep中的'-q'選項,不再需要'>/dev/null'。更好一點。 – Ray
您可以在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 ]]
而且在雙方括號內不需要引號。它們不能在右側使用,或者正則表達式被改爲文字字符串。
最清潔的一個國際海事組織,對我來說,我也添加了標籤,但看起來有點時髦,因爲我不得不把美元 - 報價放在那裏'pattern =「|'」$'| \ t'' - 有更清晰的方式嗎? – nhed
@nhed:在單個字符的情況下,您可以使用字符模式而不是管道字符替代。這可能稍微不好看:'pattern = $'[''t]''。你也可以使用一個變量:'tab = $'\ t'; pattern =「|'| $ tab」'或者一個文字選項卡(這對於可讀性來說不是很好),方法是使用Ctrl-V-Tab鍵入。 –
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
[[ "$str" = "${str%[[:space:]]*}" ]] && echo "no spaces" || echo "has spaces"
請注意,這不會檢測標籤或換行符,對於那些好奇的人 –
我不知道爲什麼沒有人提到的[:空間:]設置。通常你不僅對檢測空間特徵感興趣。我經常需要檢測任何空白區域,例如標籤。 「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
對於那些對此解決方案感興趣的人,我的'grep'告訴我'字符類語法是[[:space:]],而不是[:space: ]'。否則,出色的解決方案 – jdferreira
由於問題被標記爲「bash」,因此不需要啓動另一個進程來測試字符串:case *「String」in * [[:space:]] *)echo「match」;; esac' –
- 1. 檢查字符串是否有空格
- 2. 檢查一個字符串是否只有字母+空格?
- 3. 如何檢查字符串是否有空格在JavaScript的
- 4. 如何檢查一個字符串是否在Elixir中爲空
- 5. 在shell腳本中檢查字符串錯誤是否爲空?
- 6. 如何檢查一個字符串是否有空格或結尾
- 7. 如何檢查一個字符串是否有連續的空格3
- 8. 如何檢查一個字符串是否有連續的空格
- 9. Applescript:檢查一個字符串是否包含空字符串?
- 10. 檢查一個字符串是否都是唯一的字符,空格除外
- 11. vb.net如何檢查一個字符串是否有某個字
- 12. 在檢查字符串是否爲空時表示字符串中的空格
- 13. 如何檢查一個字符串數組是否爲空?
- 14. 如何檢查一個字符串是否爲空或在Android Studio中爲空
- 15. 檢查字符串中是否只有空格
- 16. TSQL,檢查comman是否在字符串後有空格
- 17. 檢查字符串中的下一個字符是否爲空格
- 18. 檢查變量在前10個字符中是否有空格
- 19. Javascript:檢查字符串分隔符之間是否有空格
- 20. 如何檢查是否字符串有
- 21. iOS:如何檢查一個字符串是否只有數字?
- 22. 檢查字符串是否包含空格和多個@符號
- 23. 如何檢查一個字符串是否是一個HashMap
- 24. 檢查一個字符串是否包含任何字符
- 25. 檢查是否有任何字符串列表是在另一個字符串
- 26. 如何檢查字符串是否包含空格
- 27. Javascript - 如何在字符串中查找子字符串並檢查它之前/之後是否有空格?
- 28. 如何檢查一個對象是否是一個字符串?
- 29. 測試字符串在Bash中是否有非空白字符
- 30. 如何判斷一個字符串是否未在bash shell腳本中定義?
爲什麼要這樣做?如果您試圖檢查「無效」文件名,則可以修改腳本以支持帶空格或引號的文件名。例如。 –
你是說你想知道:a)空間周圍有單/雙引號b)單/雙引號以及空格c)與之完全不同的東西? – ezpz
只是爲了檢查一個字符串是否有任何單引號和它是否有任何空間 – derrdji