POSIX Bash Shell中Here Doc单引号分隔符的正确用法咨询
POSIX Shell Here Doc 中单引号作为分隔符的正确处理方式
核心问题分析
你之前的写法失效,主要是两个原因:
- 当用
<< '作为起始标记时,Shell会将单引号视为未闭合的引号,需要输入**单独一行的'**作为结束标记(不能带任何额外字符,比如注释、空格); - 用
\'作为内容行无法触发结束,因为结束标记必须是单独一行的分隔符,而非内容里的转义单引号。
正确处理方式
方式1:保留内容原样(不展开变量/命令)
如果你希望Here Doc的内容完全不被Shell解析(类似单引号字符串的效果),可以通过转义分隔符实现:
bash --posix cat << \' # 这里的内容会原样输出,$HOME不会被替换 echo $HOME # 结束时输入单独一行的'即可 '
执行时,只要输入单独一行的'(无任何空格、注释),Here Doc就会结束,内容原样输出。
方式2:允许内容展开
如果不需要阻止内容解析,直接用单引号作为分隔符即可,同样要保证结束标记是单独一行的':
bash --posix cat << ' # 这里的$HOME会被替换为实际家目录路径 echo $HOME '
规范出处
POSIX 1003.1-2017(Shell命令语言)中关于Here-Document的章节明确规定:
Here-documents 的格式为
<<[-]word,后续的内容直到出现仅包含分隔符和换行符的行(无空白字符)时结束。如果word中的任何字符被转义或引号包裹,Here Doc的内容不会进行参数扩展、命令替换等解析操作;否则会正常解析内容。
内容的提问来源于stack exchange,提问作者Youssouf Boudouia
相关产品推荐
相关产品推荐

