如何知道一个角色是否是回车?

时间:2015-07-06 15:38:37

标签: bash

问题:

我一直能够循环遍历字符来识别我想要的字符。但是,现在我想确定一个回车,我的做事方式似乎不起作用:

function removeCarriageReturn()
{
  word=""

  while IFS= read -r -n1 char ; do
    if [ "${char}" != "\r" ] ; then
      word="${word}${char}"
    fi
  done <<<"$1"

  printf '%s\n' "$word"
}

结果:

由于我不知道的原因,它在回车前添加了“$”,为什么? 结果如下(来自詹金斯):

当分析的字符为例如8

++ '[' 8 '!=' '\r' ']'

当分析的字符是\ r

++ '[' $'\r' '!=' '\r' ']'

2 个答案:

答案 0 :(得分:5)

$''引用是ANSI-C quoting,它解释了一些转义序列。

没有任何内容正在添加,只有set -x显示实际正在发生的事情。您不具有双字符字符串"\r",您有文字\r,而$'\r'是什么。

这个事实(和set -x输出)也告诉你如何匹配你正在寻找的角色。使用$'\r'

答案 1 :(得分:4)

在实际问题中,从值中删除任何回车的最简单方法是

value=${value//$'\r'}

(这也表明您的if语句会读取

if [ "$char" != $'\r' ]; then.

请注意,这与-x用于显示回车的语法相同。)