使用printf将带空格变量写入文件时如何避免自动换行拆分?
问题原因
你遇到的内容拆分是shell的变量扩展分词机制导致的:当你直接使用未加双引号的$Value2时,shell会按照默认的内部字段分隔符(IFS,默认包含空格、制表符、换行符)把变量内容拆分成多个独立参数传给printf命令。而你使用的printf '%s\n'格式会为每一个传入参数单独添加换行输出,自然就把原本带空格的完整内容拆成了多行。
解决方法
只需要给变量加上双引号,阻止shell的分词行为即可,修改后的命令如下:
printf '%s\n' "$Value2" >> "./print.csv"
双引号包裹变量后,shell会把整个变量的内容作为单个参数传给printf,就会完整输出为一行。
可选替代方案
如果你不需要额外处理特殊转义字符,也可以用更简洁的echo命令实现相同效果:
echo "$Value2" >> "./print.csv"
内容的提问来源于stack exchange,提问作者JhnWorks
相关产品推荐
相关产品推荐

