我正在尝试在 bash 中执行一些文件管理,并且我有以下格式的字符串:
1 dir/hello.txt
2 dir2/bar.jpg
当我运行这个替换时,${FOO/[:space:]*/Hello}
我得到了这个结果:1 dir/hHello
目标是将第一个空格后的所有内容(包括空格)替换为Hello
我觉得这似乎是个 bug。在这种情况下,请确认,我会将问题上报。
我正在尝试在 bash 中执行一些文件管理,并且我有以下格式的字符串:
1 dir/hello.txt
2 dir2/bar.jpg
当我运行这个替换时,${FOO/[:space:]*/Hello}
我得到了这个结果:1 dir/hHello
目标是将第一个空格后的所有内容(包括空格)替换为Hello
我觉得这似乎是个 bug。在这种情况下,请确认,我会将问题上报。
你几乎说对了。从你的引言中:
因此,您需要将方括号加倍:
生产
1Hello
。(最后是 TLDR。)来自 OpenGroup POSIX 规范:
在语言环境定义中,表达式“[[.ch.]]”应被视为包含排序符号“ch”的 RE,而“[ch]”应被视为与“c”或“h”匹配的 RE。排序符号仅在括号表达式内可识别。如果字符串不是当前语言环境中的排序元素,则表达式无效。
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_05
解决方案是使用双括号。我会推动上游更好地记录这一点。