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

Bash脚本中含空格文件名被截断的问题求助

解决Bash脚本传递含空格文件名的问题

问题根源

你当前使用"${documents[*]}"传递数组参数时,Bash会将数组内所有元素用空格拼接成单一字符串。当download.sh接收这个字符串后,会默认按空格拆分参数,导致/datalog/AB errors.txt被拆成/datalog/AB和errors.txt两个独立参数,无法识别为完整文件名。

解决方案

1. 修改主脚本的参数传递方式

将数组传递的"${documents[*]}"替换为"${documents[@]}",后者会把数组中的每个元素作为独立参数传递,完整保留含空格的文件名:

#!/bin/bash

documents=("/datalog/AB errors.txt")

/usr/bin/bash /home/user/download.sh "${documents[@]}"

2. 确保download.sh正确接收参数

在download.sh中,必须用"$@"来遍历所有传入的参数,这样每个带空格的文件名都会被当作整体处理。示例如下:

#!/bin/bash

# 遍历所有传入的文件路径,每个路径作为独立参数
for file_path in "$@"; do
    # 替换为你的实际SCP命令,注意用双引号包裹$file_path
    scp remote_user@remote_host:"$file_path" /your/local/download/dir/
done

关键说明

  • "${array[@]}":传递数组时,会将数组的每个元素作为独立参数,完整保留元素内的空格和特殊字符。
  • "$@":在接收参数的脚本中,代表所有传入的参数,能确保每个参数的完整性不被拆分。

内容的提问来源于stack exchange,提问作者abbb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:06:41