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

shell中将egrep匹配结果赋值给变量后换行变空格如何解决?

问题原因
  • 用$()捕获命令输出时,命令输出的中间换行符实际是保留在变量中的,你观察到换行变成空格,本质是输出变量时没有添加双引号触发了Bash的字段拆分逻辑:
    Bash默认的内部字段分隔符(IFS)包含空格、制表符、换行符,直接执行echo $pathsText时,变量内容会被按IFS拆分为独立字段,再用空格拼接输出,最终所有换行就被替换为了空格。
解决方法

仅需输出时保留换行

赋值逻辑无需修改,输出变量时用双引号包裹即可:

pathsText=$(system_profiler SPApplicationsDataType | egrep '^\s+Location:\s+.*$')
# 加双引号保留原始换行格式
echo "$pathsText"

需要逐行处理匹配结果(兼容路径含空格的场景)

建议将匹配结果按行存入数组,后续操作不会因为路径含空格出现拆分错误:

# mapfile将每行结果读入数组,-t参数自动移除每行末尾的换行符
mapfile -t pathsArray < <(system_profiler SPApplicationsDataType | egrep '^\s+Location:\s+.*$')

# 逐行处理示例
for line in "${pathsArray[@]}"; do
  echo "$line"
done

旧版本macOS的默认bash不支持mapfile,可以用以下写法生成数组:

pathsArray=()
while IFS= read -r line; do
  pathsArray+=("$line")
done < <(system_profiler SPApplicationsDataType | egrep '^\s+Location:\s+.*$')

内容的提问来源于stack exchange,提问作者T. Reed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:36:04