if语句中的回车和通配符

问题描述 投票:0回答:2

谁能告诉我为什么这不起作用:

#!/bin/bash
# 

foo="hello

world"

if [[ "$foo" == *"\r\r"* ]]
then 
  echo "two carriage-returns found"
fi  

编辑:弗雷迪和WjAndrea,百万谢!哎呀,我花了几个小时试图使语法正确!

bash if-statement wildcard carriage-return
2个回答
0
投票

两个原因:

  1. 您的回车符\r与换行符\n混淆了>
  2. 这些\r实际上是反斜杠,后跟小写的R,而不是回车
  3. 因此,您可以使用C-style strings使其与众不同:

if [[ "$foo" == *$'\n\n'* ]]

或放置两个实际的换行符,但这很丑陋:

if [[ "$foo" == *"

"* ]]

1
投票

您需要检查两个换行符(换行符)\n\n,然后使用ANSI-C quoting

© www.soinside.com 2019 - 2024. All rights reserved.