问题:
我一直能够循环遍历字符来识别我想要的字符。但是,现在我想确定一个回车,我的做事方式似乎不起作用:
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' ']'
答案 0 :(得分:5)
$''
引用是ANSI-C quoting,它解释了一些转义序列。
没有任何内容正在添加,只有set -x
显示实际正在发生的事情。您不具有双字符字符串"\r"
,您有文字\r
,而$'\r'
是什么。
这个事实(和set -x
输出)也告诉你如何匹配你正在寻找的角色。使用$'\r'
。
答案 1 :(得分:4)
在实际问题中,从值中删除任何回车的最简单方法是
value=${value//$'\r'}
(这也表明您的if
语句会读取
if [ "$char" != $'\r' ]; then.
请注意,这与-x
用于显示回车的语法相同。)