`[$'\r\n']` 是什么意思?

`[$'\r\n']` 是什么意思?

我经常使用这个表达方式line=${line//[$'\r\n']}。但这是什么[$'\r\n']意思呢?

我知道它可以删除'\r\n'字符,但它是如何做到的?它是只删除两个字符的实例,还是还会找到仅一个字符的匹配项?

我不明白这个语法的用法。

如果可以的话,请给我一个手册的链接。我找不到这个问题的答案。

答案1

此命令从变量中删除所有回车符和换行符字节line

这是参数扩展的 Bash(以及 zsh 和 ksh)扩展:${line//XYZ}替换全部模式XYZ$line任何内容都匹配。

该模式[$'\r\n']有两个组成部分:[...]火柴任何里面的字符$'\r\n'ANSI-C 引用(另一个扩展),并扩展为回车符 ( \r) 和换行符 ( \n) 字节,其中[$'\r\n']包含[...]回车符和换行符,因此与它们都匹配。

的完整手册命令、运算符、括号等都在这里,POSIX/SUS/IEEE 1003.1 规范的一部分。这重击参考手册在这里

答案2

Bash 手册:

${范围/图案/细绳}
图案被扩展以产生一个模式,就像文件名扩展一样。范围被扩展并且最长的匹配图案 其值被替换为字符串。比赛按照下述规则进行(参见模式匹配)。如果 图案开始于/, 的所有匹配项图案被替换为细绳。 ... 如果细绳为空,匹配图案被删除并且/以下模式可以被省略。

你有${line//[$'\r\n']},其中:

  • 范围line
  • 图案/[$'\r\n'](注意:以 开头/,因此模式的所有匹配项都会被替换),并且
  • 细绳为空,所以/之后图案被省略,并且匹配被删除。

遵循以下规则模式匹配:

[…]
匹配任何一个包含的字符。

$'...'告诉 bash 解释某些转义序列(这里是\r回车符和\n换行符)并将它们替换为转义序列表示的实际字符。

因此,此替换匹配回车符 (CR, \r) 或换行符 (LF, \n) 的所有实例,并删除它们。

答案3

$ 表示:查看模式的行尾 模式为 '\r\n';含义:\r(回车符)\n(换行符)

方括号 [ ] 用于将在单独的行上搜索的内容括起来

相关内容