我觉得很困惑,我可以从空字符串读取一次,但不能从空文件读取一次:

while read -r foo; do echo ${#foo}; done <<< ''      # prints '0'
while read -r foo; do echo ${#foo}; done < /dev/null # prints nothing

有没有一种方法可以写出一次都不能读取的字符串文字?相反,一个文件需要有什么内容,才能从其中读取一个空字符串,而不需要其他内容?

推荐答案

参考bash manual description of here strings:

3.6.7 Here Strings

这里文件的一个变体,格式为:

[n]<<< word

词经过波浪形扩展、参数扩展和变量扩展, 命令替换、算术扩展和引号删除. 不执行文件扩展和字分割.结果是 作为单个字符串with a newline appended提供给命令, 在其标准输入(或文件描述符n,如果指定了n).

注意"附加一个新行".即使字符串开始时为空,在以这种方式使用时,它最终至少包含一个新行.一个字符串或文件只包含一个新行,将被while read循环解释为一个空白行.

Linux相关问答推荐

BASH-SCRIPT-在特定行合并两个文件

在 Bash 中使用 shell 脚本从文件中解析版本号

使用文件名重新打开 linux 管道(仅从一侧)

`__meminit` 在 Linux 内核中意味着什么?

将 Visual Studio C++ 项目迁移到 Linux 和 CMake

我想使用排序命令对第 5 列进行日期排序.但问题是格式不一致,有什么方法可以做到吗?

Linux 系统调用文档

sed: -i 不能与 Mac OS X 上的标准输入一起使用

使用 C/C++ (GCC/G++) 在 Linux 中的套接字编程中发送和接收文件

安装 mod_ssl 亚马逊 Linux

如何使目录下的所有文件在linux上可读?

C.UTF-8 和 en_US.UTF-8 语言环境有什么区别?

列出当前目录和所有子目录中特定大小的文件

比较两个图像的 python/linux 方式

在 PHP / Apache / Linux 环境中,为什么 chmod 777 是危险的?

ldconfig 错误:使用 Linux 加载程序时不是符号链接

基于shell中正则表达式的 colored颜色 突出显示输出

在类 Unix 系统中上次运行的 cron 作业(job)的详细信息?

在linux中根据内容拆分文件

如何拖尾除第一行以外的所有行