此处文档标签中哪些字符有效?
cat << 'what_characters_can_be_used_here'
what_characters_can_be_used_here
我问,因为我想要一个不太可能的字符串。因此,我想在字符串中包含奇数字符。我使用 bash,并且可以使用 bash 的特定功能,但了解一般 POSIX 限制也很有趣。了解分隔符字符串的最大安全长度也很有趣。
答案1
您可以使用除换行符之外的任何非空字符序列作为分隔符。POSIX没有说明任何限制。你可以指定分隔符中的换行符,但永远不会找到它。许多 shell 支持空分隔符,但 ATT ksh 不支持。事实上,大多数 shell 接受除 null 和换行符之外的任意字节序列,但我不建议使用无效的字节序列。我还建议不要使用回车符,因为当脚本被编辑或传输到另一台机器时,这些字符可能会被重新编码。尾随空白也容易在编辑过程中被意外删除。坚持使用可打印的 ASCII 更安全。
当然,如果分隔符包含在 shell 语法中具有特殊含义的字符,则需要在<<
运算符后面引用它,然后只能使用文字的here-document,而不是带有变量和命令的here-document代换。
答案2
根据POSIX规范, 这Heredocs 部分将heredoc“标签”简单地定义为单词。这让我相信 shell 定义为有效的任何内容单词是可以接受的。
至于最大字长,我敢打赌这取决于您运行脚本的 shell,尽管我非常怀疑您是否会在不使用长得离谱的字符串的情况下达到长度的硬性限制。