如何实现Shell脚本逐字符随机着色且保持按行输出?
解决Shell脚本逐字符随机着色并保留原行结构的问题
以下是修改后的脚本,实现每个字符随机从shuf.ans中选取颜色,同时完全保留原文本的行结构:
#!/bin/bash echo -e "\n\n" # 逐行读取目标文本文件 while IFS= read -r line; do # 遍历当前行的每一个字符 for (( i=0; i<${#line}; i++ )); do # 截取当前位置的单个字符 char="${line:i:1}" # 随机选取颜色,输出带颜色的字符(-n 避免自动换行) echo -ne "\e[38;5;$(shuf -n 1 shuf.ans)m${char}\e[0m" done # 每行处理完成后输出换行,还原原行结构 echo done < ty && echo ""
关键说明:
- 先通过
while IFS= read -r line逐行读取ty文件,确保原有的换行结构被保留 - 使用bash内置的字符串截取语法
${line:i:1},从当前行中逐个提取字符(i为字符索引,从0开始) echo -ne的参数作用:-n禁止自动添加换行符,让字符连续输出;-e允许解析ANSI颜色转义序列- 每行所有字符处理完毕后,执行
echo手动添加换行,还原原文本的行分隔
原问题原因:
之前直接用read -r -N1读取单个字符时,若搭配普通echo输出,会默认给每个字符添加换行符,导致字符单独成行。而先逐行读取再处理字符的方式,既能精准控制每个字符的着色,又能完整保留原文本的排版。
内容的提问来源于stack exchange,提问作者Chris Schneider
相关产品推荐
相关产品推荐

