如何读取 bash 中的 space - 读取不会

How to read a space in bash - read will not

许多人展示了如何在阅读 bash 中的一行时保持 spaces。但是我有一个基于字符的算法,它需要分别处理每个字符的每一端——包括 spaces。不幸的是,我无法读取 bash 以从输入中读取 单个 space 字符。

while read -r -n 1 c; do printf "[%c]" "$c" done <<< "mark spitz" printf "[ ]\n"

产量

[m][a][r][k][][s][p][i][t][z][][ ]

我已经解决了这个问题,但最好弄清楚如何读取单个 any 单个字符。 是的,尝试设置 IFS 等

只需设置输入字段分隔符(a),这样它就不会将 space(或任何字符)视为分隔符,效果很好:

printf 'mark spitz' | while IFS="" read -r -n 1 c; do
    printf "[%c]" "$c"
done
echo

这给你:

[m][a][r][k][ ][s][p][i][t][z]

你会注意到我也稍微改变了你在那里输入的方式,<<< 似乎在最后提供了一个无关的字符,虽然它对输入法本身并不重要,我虽然最好更改它以避免任何混淆。


(a) 是的,我知道你 说过 你已经尝试设置 IFS 但是,因为你实际上并没有展示你是如何尝试这个的,而且它似乎按照我的方式工作得很好,我不得不假设你可能只是做错了什么。