You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:37:33