Bash技术问题:需避免处理过程中额外空格被删除
解决连续空格丢失的问题
问题场景回顾
- 直接执行
echo "${FILE_LIST_PATH[7]}"时,字符串中的连续空格可正常保留 - 通过
echo "${FILE_LIST_PATH[7]}" | awk '{$NF=""}1'处理后,连续空格被合并为单个空格 - 将字符串赋值给变量后执行
echo $FILE_PATH,连续空格同样被合并
对应解决方案
1. 变量输出时保留空格
shell在展开不带双引号的变量时,会触发单词拆分机制,连续空格会被当作单个分隔符处理。解决方法是用双引号包裹变量再输出:
FILE_PATH="${FILE_LIST_PATH[7]}" echo "$FILE_PATH"
(注:无需通过echo中转赋值,直接将数组元素赋值给变量更稳妥)
2. awk处理时保留原始空格
默认awk会把任意连续空白字符当作字段分隔符,输出时用单个空格分隔字段,导致连续空格丢失。要保留原始空格并移除最后一个数字字段,改用正则替换的方式:
echo "${FILE_LIST_PATH[7]}" | awk '{sub(/[[:space:]]+[^[:space:]]+$/, "")}1'
这个命令通过正则匹配字符串末尾的「一个或多个空白字符+非空白字符序列」(即最后的数字字段),将其替换为空,全程不会破坏原始的空格结构。
内容的提问来源于stack exchange,提问作者Alex Lum
相关产品推荐
相关产品推荐

