Bash中read命令读取带前导空格的输入时丢失空格,如何保留前导空格?
Bash中read命令读取带前导空格的输入时丢失空格,如何保留前导空格?
嗨,这个问题我之前也踩过坑!Bash里的read命令默认有两个“坑”导致你丢失前导空格:一是它会忽略输入开头的空白字符,二是输出变量时如果不用双引号包裹,Bash会自动把连续空白合并成单个空格。
给你两个关键的修改点,就能完美解决:
修改
read的行为,保留完整输入
在read命令前加上IFS=,同时加上-r选项(避免反斜杠被转义,是个安全好习惯),这样read就会完整读取所有输入内容,包括前导空格、连续空格:IFS= read -r X这里
IFS=(内部字段分隔符设为空)会让read不再把空格、制表符当作字段分隔符,也就不会截断前导空格了。输出变量时用双引号包裹
原来的echo $X会让Bash展开变量时合并连续空白,必须改成用双引号包裹变量,才能保留所有空格:echo "$X" > file.txt
把这两步结合起来,测试一下你提到的场景:
- 输入
toto tata(两个前导空格),file.txt里会完整保留这两个前导空格 - 输入
(两个空格),file.txt里也会写入这两个空格,不会是空内容
这样就能完美解决你的问题啦!
备注:内容来源于stack exchange,提问作者user34224
相关产品推荐
相关产品推荐

