为什么 Bash Read 需要重定向



如果这很明显,请原谅我,但我无法推理出来。 目的是将 heredoc 分配给 bash 中的变量。 本网站上的正确代码是:

read -r -d '' VAR <<'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF

这效果很好。 但我不明白为什么读取不会在没有重定向的情况下将数据加载到VAR中。

-d 将分隔符设置为单引号。 bash 不应该吸收以下所有数据,直到遇到'并将批次放入VAR吗?

当然,这不会发生。 我只是想知道为什么不呢。

read从 stdin 读取 - 而不是从脚本的源文件中读取。否则将毫无用处(用于提示用户,从单独的文件中读取等(。请参阅 BashFAQ #1 了解有关其使用的更多信息。

如果在终端上运行脚本,则默认情况下read从该终端读取;如果将内容管道传输到脚本中,则默认read从该内容读取;等等。

read -r -d '' var ,具体来说,从 stdin 读取,直到看到 NUL 字符或发生文件结束条件(在后一种情况下,它以非零状态退出,但仍填充目标变量(。

使用 <<'EOF' 从包含 heredoc 内容的临时文件中重定向您的 stdin。因此,即使文件不包含 NULL,它最终也会命中 EOF,因此控制权将返回。

相关内容

  • 没有找到相关文章

最新更新