此处文档中的分隔符是否被将其作为输入的程序看到并使用?

此处文档中的分隔符是否被将其作为输入的程序看到并使用?

这里文档的格式是:

<<[−]word
here-document
delimiter

将此处文档作为标准输入的程序是否会看到并使用分隔符?

或者分隔符仅由 bash 使用,而不会被将此处文档作为标准输入输入的程序看到和使用?

答案1

不,外部程序看不到它 - 分隔符只能由运行脚本的 shell 看到和使用。

答案2

这是您的 shell 使用了此处文档分隔符,外部程序对此没有任何概念。

外壳做到了令牌识别并将此处文档数据传递给程序。

strace

$ strace -s 10 -e read cat <<-IN
    1
IN
read(3, "\177ELF\2\1\1\3\0\0"..., 832)  = 832
read(0, "1\n", 131072)                  = 2
1
read(0, "", 131072)                     = 0
+++ exited with 0 +++

您只能看到 所看到的此处文档数据cat

相关内容