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

如何保留指定分隔符保存Zenity列表输出?

解决Zenity多选输出换行符丢失的问题

这个问题的核心是Shell变量展开时的单词拆分机制在搞鬼!当你直接用echo $VAR时,Shell会把变量里的换行符当成空白分隔符处理,所以原本的换行就变成了空格。下面给你几个简单的解决办法:

方法1:用双引号包裹变量输出

只要给变量加上双引号,就能让Shell保留变量里的所有换行符,修改后的脚本如下:

#!/bin/bash
VAR=$(zenity --list --multiple --separator="\n" --column="col.1" --column="col.2" FALSE "option 1" FALSE "option 2" FALSE "option3" --checklist)
echo "$VAR" >> output

这里的关键是echo "$VAR",双引号让变量作为一个整体被输出,不会拆分换行符。

方法2:直接将Zenity输出重定向到文件

如果不需要后续使用这个变量,完全可以跳过赋值步骤,直接把Zenity的结果写入文件,这样更简洁也更不容易出错:

#!/bin/bash
zenity --list --multiple --separator="\n" --column="col.1" --column="col.2" FALSE "option 1" FALSE "option 2" FALSE "option3" --checklist >> output

方法3:用printf输出(更可靠)

printf比echo的行为更一致,不会因为不同Shell环境产生差异,用法如下:

#!/bin/bash
VAR=$(zenity --list --multiple --separator="\n" --column="col.1" --column="col.2" FALSE "option 1" FALSE "option 2" FALSE "option3" --checklist)
printf "%s" "$VAR" >> output

%s会原样输出变量内容,完美保留换行符。

简单总结下:Shell中不加双引号的变量展开会丢失换行等空白符,只要给变量加上双引号,或者直接重定向输出,就能解决你的问题啦!

内容的提问来源于stack exchange,提问作者Hayder Ctee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:54:41