Bash脚本存储find结果到变量后echo丢失空格问题咨询
问题:echo输出find结果丢失空格的原因
先看出现问题的脚本:
#!/bin/bash faixa_num=90 select_dir="A" full_path="/home/mel/smbshare/PassporteParaPortuguese/LIDEL*" full_path="$full_path"$select_dir/ find $full_path -type f -name $faixa_num*.ogg glob_full_path=$(find $full_path -type f -name $faixa_num*.ogg) echo $glob_full_path
执行该脚本时,直接运行find命令的结果与将结果存入变量后用echo输出的结果不一致,echo输出丢失了原本的空格。
原因解析
核心问题出在bash的**单词拆分(Word Splitting)**机制:
- 直接执行
find时,命令的标准输出会原封不动传递到终端,文件路径里的连续空格、换行符都会被完整保留。 - 当用
glob_full_path=$(find ...)捕获命令输出时,bash会把输出中的所有空白字符(空格、换行、制表符)都视为单词分隔符,将整个内容拆分成多个"单词"。 - 执行
echo $glob_full_path时,bash会把这些拆分后的单词用单个空格连接起来输出,所以原本的连续空格会被压缩成一个,换行也会变成空格,最终导致空格丢失。
解决办法
如果要保留find输出的原始格式,给变量加上双引号即可:
echo "$glob_full_path"
双引号会阻止bash对变量内容进行单词拆分和路径扩展,确保内容原样输出。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

