我正在尝试使用read
中的bash
内置来一次读取一个字符。当我对-N 1
使用read
参数时,这实际上是完美无缺的,但我有一些OSX用户向我报告他们的bash没有这个选项。
所以现在我正在使用以下内容:
$ while IFS= read -r -d'' -s -n 1 char; do echo -n "${char}"; done < filename
这个回声一次回到filename
中的每个字符,除了,神秘地,连字符(-
)。例如。如果我有
$ cat blah
uh-oh
结果是:
$ while IFS= read -r -d'' -s -n 1 char; do echo -n "${char}"; done < blah
uhoh
文档中没有任何内容表明任何可以表明这一点的内容。如果我将${char}
中的echo
替换为${#char}
,则会打印0
,其中应该读取连字符。它完全被吃掉了。
如果我放弃-d''
它而不是吃换行符,但不吃连字符,所以至少有意义,因为换行符是默认分隔符。这似乎是-d''
将连字符视为分隔符的错误。
FWIW我有
$ bash --version
GNU bash, version 4.3.42(4)-release (x86_64-unknown-cygwin)
但这是OSX用户首次向我报告的。
答案 0 :(得分:4)
您实际上未正确设置分隔符选项。
注意额外的空间:
while IFS= read -r -d '' -s -n 1 char; do echo -n "${char}"; done < filename
这很好用。
在您的代码中,分隔符字符设置为-s