如何在保留格式的同时更新ASCII艺术中的动态值?(Bash/Python)
解决Bash中保留ASCII艺术格式并替换变量的问题
Bash 方案1:使用 envsubst 工具
这是最稳妥的方式,envsubst 仅替换环境变量,完全不会破坏ASCII艺术的原有格式。
操作步骤:
- 将你的ASCII艺术保存为模板文件(比如
status_template.txt),内容保留带变量占位符的原始格式。 - 在Bash中定义需要替换的变量:
CPU_W=120 CPU_Freq=3600 GPU_W=80 GPU=1800 size=45
- 执行替换并输出:
envsubst < status_template.txt
如果要避免意外替换其他环境变量,可以指定仅替换目标变量:
envsubst '${CPU_W},${CPU_Freq},${GPU_W},${GPU},${size}' < status_template.txt
Bash 方案2:无引号Heredoc + 关闭通配符
如果不想依赖外部文件,直接在脚本内写Heredoc,只需关闭Bash的通配符扩展,防止特殊字符(如*)被错误解析:
# 定义变量 CPU_W=120 CPU_Freq=3600 GPU_W=80 GPU=1800 size=45 # 关闭通配符扩展,避免格式破坏 set -f # 无引号Heredoc会自动替换变量,同时保留格式 cat << EOF ======================================================== | | | | | | | | | | | | | CPU | | GPU | | HDD | | | | | | | | | | | | | | ${CPU_W}W | | | | | | ${CPU_Freq}MHz| | | |Avail Mem${size}G| | | |${GPU_W}W | | Used Mem${size}G| | | |${GPU}Mhz | | | | | | | | | | | | | | | | | | | | | | | | | | | ======================================================== EOF # 恢复通配符扩展(可选) set +f
Python 方案
用Python处理更灵活,字符串格式化只会替换指定占位符,完全保证格式不变:
# 定义变量字典 status_vars = { "CPU_W": 120, "CPU_Freq": 3600, "GPU_W": 80, "GPU": 1800, "size": 45 } # 保留原始格式的ASCII模板 ascii_template = """======================================================== | | | | | | | | | | | | | CPU | | GPU | | HDD | | | | | | | | | | | | | | {CPU_W}W | | | | | | {CPU_Freq}MHz| | | |Avail Mem{size}G| | | |{GPU_W}W | | Used Mem{size}G| | | |{GPU}Mhz | | | | | | | | | | | | | | | | | | | | | | | | | | | ======================================================== """ # 替换变量并输出 print(ascii_template.format(**status_vars))
如果想保留你原来的${变量名}格式,可以用string.Template:
from string import Template status_vars = { "CPU_W": 120, "CPU_Freq": 3600, "GPU_W": 80, "GPU": 1800, "size": 45 } ascii_template = Template("""======================================================== | | | | | | | | | | | | | CPU | | GPU | | HDD | | | | | | | | | | | | | | ${CPU_W}W | | | | | | ${CPU_Freq}MHz| | | |Avail Mem${size}G| | | |${GPU_W}W | | Used Mem${size}G| | | |${GPU}Mhz | | | | | | | | | | | | | | | | | | | | | | | | | | | ======================================================== """) print(ascii_template.substitute(status_vars))
内容的提问来源于stack exchange,提问作者hari9602
相关产品推荐
相关产品推荐

