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

Shell中如何删除数组所有元素的换行符并正确重新赋值

原写法的核心问题

  • 遍历逻辑错误:${backup_versions[*]}遍历得到的是数组元素的值,不是数组下标,用元素值作为索引给数组赋值,根本不会修改原位置的数组元素
  • 赋值语法错误:Shell 中要把命令执行结果赋值给变量,必须用$()做命令替换,原写法的backup_versions[$i]=echo "$i" | tr '\n' ' ' 会被Shell解析为「设置临时环境变量backup_versions[$i]的值为字符串echo,再执行"$i"命令并把输出管道给tr」,完全不符合需求
  • 替换逻辑冗余:你要删除末尾换行,用tr替换为空格会额外引入多余的空格,而且调用外部命令会产生不必要的子进程开销

最优实现(无额外子进程,性能最高)

用Shell原生参数扩展直接删除末尾换行,不需要调用任何外部命令:

易读版

# 遍历数组下标,而非元素值
for idx in "${!backup_versions[@]}"; do
  # ${var%pattern} 语法直接删除变量末尾匹配的pattern
  backup_versions[$idx]=${backup_versions[$idx]%$'\n'}
done

单行版

for idx in "${!backup_versions[@]}"; do backup_versions[$idx]=${backup_versions[$idx]%$'\n'}; done

兼容tr写法的正确实现

如果你坚持要用tr实现删除换行,需要补全命令替换语法:

for idx in "${!backup_versions[@]}"; do
  backup_versions[$idx]=$(echo -n "${backup_versions[$idx]}" | tr -d '\n')
done

内容的提问来源于stack exchange,提问作者Thanatos-Delta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:48:01