Uni*_*ser 3 shell escape-characters
我经常使用这个表达line=${line//[$'\r\n']}。但是是什么[$'\r\n']意思呢?
我知道它删除了'\r\n'字符,但它是如何做到的?它是只删除两个字符的实例,还是只找到一个字符的匹配项?
我不明白这种语法的用法。
如果可以,请给我一个手册链接。我找不到这个问题的答案。
此命令从line变量中删除所有回车和换行字节。
这是一击(和的zsh和ksh)扩展参数扩展:${line//XYZ}替换所有模式的比赛XYZ中$line什么也没有。
该模式[$'\r\n']有两个组成部分:[...]匹配其中的任何字符。$'\r\n'是ANSI-C引述(另一个分机),并且扩展到回车(\r)和换行(\n)字节,因此[$'\r\n']是[...]与在其内部一个回车和换行,所以匹配两者。
shell命令、运算符、括号等的完整手册在这里,是 POSIX/SUS/IEEE 1003.1 规范的一部分。该猛砸参考手册是在这里。
从Bash 手册:
$ {参数/模式/串}
的图案被膨胀,以产生一个模式,就像在文件名扩展。参数被扩展,并且模式 与其值的最长匹配被替换为字符串。匹配是根据下面描述的规则执行的(参见模式匹配)。如果 模式开头/,所有的比赛模式被替换为的字符串。... 如果string为空,则删除模式的匹配项,并且/可以省略以下模式。
你有${line//[$'\r\n']},其中:
line,/[$'\r\n'](注:开始/,所以图案的所有比赛被替换),和/后图案被省略,并且匹配被删除。遵循模式匹配规则:
[…]
匹配任何一个封闭的字符。
$'...'告诉 bash 解释某些转义序列(这里,\r用于回车和\n换行)并将它们替换为由转义序列表示的实际字符。
因此,此替换匹配回车 (CR, \r) 或换行符 (LF, \n) 的所有实例,并删除它们。
| 归档时间: |
|
| 查看次数: |
2821 次 |
| 最近记录: |