如何保留指定分隔符保存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
相关产品推荐
相关产品推荐

