You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux Bash Shell中逐字符打印字符串

如何在Linux Bash Shell中逐字符打印字符串

嘿,我懂你现在的困扰啦——你想把字符串里的每个字符单独一行打印出来,但当前的脚本因为bash的默认行为,把字符串按空格拆成了两个单词输出。咱们一步步来搞定这个问题~

首先得说清楚你原来的脚本为啥不对:你用for i in ${txt[*]}的时候,bash会把变量txt里的内容按照空格、制表符、换行符(也就是默认的IFS,内部字段分隔符)分割成多个元素,所以"Hello World"就被拆成了"Hello"和"World"两个部分,循环自然就只输出这两行啦。

接下来给你几种可行的解决方案,你可以按需选择:

方法1:用fold命令(最简洁的方式)

fold命令本来是用来给文本换行的,我们可以指定每行只显示1个字符,直接一步到位:

txt="Hello World"
echo "$txt" | fold -w1

执行这个命令就能得到你想要的逐字符输出~

方法2:利用bash的字符串切片特性

bash原生支持字符串切片操作,我们可以通过循环遍历字符串的每个索引位置:

txt="Hello World"
for (( i=0; i<${#txt}; i++ )); do
    echo "${txt:i:1}"
done

这里简单解释下:

  • ${#txt}用来获取字符串的总长度
  • ${txt:i:1}表示从索引i的位置开始,截取1个字符

方法3:将字符串转成单字符数组

我们可以先把字符串拆成每个元素都是单个字符的数组,再遍历数组打印:

txt="Hello World"
chars=($(echo "$txt" | grep -o .))
for char in "${chars[@]}"; do
    echo "$char"
done

grep -o .会把每个字符单独输出一行,再把这些行转换成数组元素,最后循环打印即可。

方法4:用while循环配合read命令

这种方法适合处理长字符串或者管道输入的内容:

txt="Hello World"
echo "$txt" | while read -n1 char; do
    echo "$char"
done

read -n1表示每次只读取1个字符,然后打印出来。不过要注意,这种方式会把原字符串里的空格也当成字符输出,如果你想跳过空格,可以在循环里加个判断:if [ "$char" != " " ]; then echo "$char"; fi

现在试试这些方法,都能得到你想要的输出:

H
e
l
l
o

W
o
r
l
d

备注:内容来源于stack exchange,提问作者Ashwin Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:53:08