我觉得很困惑,我可以从空字符串读取一次,但不能从空文件读取一次:
while read -r foo; do echo ${#foo}; done <<< '' # prints '0'
while read -r foo; do echo ${#foo}; done < /dev/null # prints nothing
有没有一种方法可以写出一次都不能读取的字符串文字?相反,一个文件需要有什么内容,才能从其中读取一个空字符串,而不需要其他内容?
我觉得很困惑,我可以从空字符串读取一次,但不能从空文件读取一次:
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
循环解释为一个空白行.