【问题标题】:carriage-return and wildcards in if statementif 语句中的回车符和通配符
【发布时间】:2020-05-20 23:27:26
【问题描述】:

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

#!/bin/bash
# 

foo="hello

world"

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

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

【问题讨论】:

  • 你得到了什么?
  • @Sobyso :$foo 和模式字符串都不包含回车符。您可以通过(例如)xxd <<<"$foo" 轻松验证这一点。

标签: bash if-statement wildcard carriage-return


【解决方案1】:

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

#!/bin/bash

foo="hello

world"

if [[ $foo == *$'\n\n'* ]]; then
  echo "two newlines found"
fi

【讨论】:

    【解决方案2】:

    两个原因:

    1. 您将回车符 \r 与换行符 \n 混淆了
    2. \rs 字面上是反斜杠,后跟小写 R,而不是回车

    所以,你可以使用C-style strings 来让它们变得特别:

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

    或者添加两个实际的换行符,但这很难看:

    if [[ "$foo" == *"
    
    "* ]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      相关资源
      最近更新 更多