我经常使用表达式line=${line//[$'\r\n']}
。但这是什么[$'\r\n']
意思?
我知道它会删除'\r\n'
字符,但它是如何做到的?它是只删除两个字符的实例,还是只找到一个字符的匹配项?
我不明白这种语法的用法。
如果可以的话,请给我一个手册的链接。我找不到这个问题的答案。
我经常使用表达式line=${line//[$'\r\n']}
。但这是什么[$'\r\n']
意思?
我知道它会删除'\r\n'
字符,但它是如何做到的?它是只删除两个字符的实例,还是只找到一个字符的匹配项?
我不明白这种语法的用法。
如果可以的话,请给我一个手册的链接。我找不到这个问题的答案。
line
此命令从变量中删除所有回车和换行字节。这是对参数扩展的 Bash(以及 zsh 和 ksh)扩展:将模式的所有匹配项
${line//XYZ}
替换为空。XYZ
$line
该模式
[$'\r\n']
有两个组成部分:[...]
匹配其中的任何字符。$'\r\n'
是ANSI-C 引用(另一个扩展名),并扩展为回车符 (\r
) 和换行符 (\n
) 字节,因此[$'\r\n']
其中[...]
包含回车符和换行符,因此它们都匹配。shell命令、运算符、括号等的完整手册在这里,是 POSIX/SUS/IEEE 1003.1 规范的一部分。Bash参考手册在这里。
来自Bash 手册:
你有
${line//[$'\r\n']}
,其中:line
, _/[$'\r\n']
(注意:以 开头,所以模式的/
所有匹配都被替换),并且/
after模式,并删除了匹配项。遵循模式匹配规则:
$'...'
告诉 bash 解释某些转义序列(在这里,\r
用于回车和\n
换行)并用转义序列表示的实际字符替换它们。因此,此替换匹配回车符 (CR,
\r
) 或换行符 (LF,\n
) 的所有实例,并删除它们。$ 表示:查看模式的行尾模式是 '\r\n'; 含义:\r(回车)\n(换行)
方括号 [ ] 用于括起在单行上搜索的内容