File "d:\python\python37\lib\site-packages\pandas\io\excel\_base.py", line 356, in __init__
filepath_or_buffer.seek(0)
UnsupportedOperation: seek
在bash读取命令中做什么?该示例直接来自a previous SO。从read命令显示的用法来看,它说@db.Tache.FirstOrDefault(x => x.id == item.EmployeID).coloring;
@db.Employe.FirstOrDefault(x => x.id == item.EmployeID).naming;
选项定义了在行中分割单词的分隔符。空定界符有什么作用?
-d ''
通过实验,我知道该变量被分配了多行。没有它,只分配第一行。似乎很难根据用法文本来解释此行为。
答案 0 :(得分:5)
在bash read
中,内置的空字符串定界符-d ''
的行为与将定界符用作 NUL 字节或$'\0'
(由ANSI C引用的字符串定义)相同)或十六进制表示形式0x0
。
-d ''
指定每条输入行应由NUL字节分隔。这意味着在每次调用read
时,将读取输入字符串直到下一个NUL字符。
通常它与IFS=
一起使用,如下:
IFS= read -r -d ''
用于修剪输入中的前导和尾随空白。
处理NUL分隔输入的常见示例是:
while IFS= read -r -d '' file; do
echo "$file"
done < <(find . -type f -print0)
find
命令正在使用NUL作为每个条目之间的分隔符来打印当前目录中的文件。 read -d ''
将\0
设置为定界符,以便一次从find
命令的输出中读取一个条目。相关:Why ‘read’ doesn’t accept \0 as a delimiter in this example?
答案 1 :(得分:4)
read -d
将停止读取的字符从默认换行符更改为以下参数的第一个字符。
要了解的重要一点是bash使用C字符串,这些字符串由文字NUL终止。因此,当后面的参数是''
时,第一个(也是唯一的)字符是NUL终止它;因此,当外壳程序取消引用char*
以获取其指向的第一个字符时,它将获得NUL。
现在,当您使用<<EOF
重定向Heredoc时,该文档中实际上将没有任何NUL,那么您的代码如何工作?
答案是您的代码期望read
操作失败。即使失败,read
仍会填充其目标变量。因此,如果您没有终止定界符,read
的退出状态将为非零...但是无论如何,它仍会将您要收集的所有数据放入变量中!
对于不触发set -e
错误的版本,请考虑在读取完成后检查目标变量是否为空:
{ IFS= read -r -d '' string || [[ $string ]]; } <<'EOF'
...string goes here...
EOF
我们做了哪些更改?
IFS=
防止剥离前导或尾随空格(或其他字符,如果已重新定义IFS)。read -r
防止对带有反斜杠文字的内容进行修饰。|| [[ $string ]]
的意思是,如果read
报告失败,则我们检查字符串是否已填充,并且如果变量为非空,则仍认为总体命令成功。