use*_*502 6 script bash zsh read
在 macOS 上使用 read 时,我观察到 zsh 和 bash 之间的差异。
使用 bash 这个脚本
echo "characters" | while IFS= read -d '' -n 1 a; do printf %s "$a-"; done
Run Code Online (Sandbox Code Playgroud)
生产
c-h-a-r-a-c-t-e-r-s-
Run Code Online (Sandbox Code Playgroud)
而在 zsh 上我没有输出,也没有错误是否可以使用 read 逐个字符地迭代?
Gor*_*son 10
bash 和 zsh 之间的命令选项read有显着不同。在这种情况下,问题是-n两者之间的含义完全不同:在 bash 中,它表示要读取多少个字符,而在 zsh 中,它修改 or-p选项-l(与完成函数有关,与这里无关)。
在 zsh 中,您可以-k指定要读取的字符数,但它也默认从终端而不是 stdin 读取,因此您还必须添加-u 0以告诉它从 stdin 读取。
长话短说:在 zsh 中,用于read -n '' -k 1 -u 0 somevar从 stdin 读取单个字符。
read顺便说一句, bash 与 zsh(以及其他 shell)之间存在更多差异。POSIX标准只规定了-r选项;其他一切都是非标准的添加,不同 shell 扩展之间的任何相似之处都应该被视为一个愉快的意外。