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

Bash脚本中从字符串数组传入源文件至构建脚本报错求助

解决方法

错误原因分析

你之前的操作逻辑完全搞错了:

  • < "${SOURCE_AS_STR}" 是告诉Bash去读取名为该字符串的文件,而非把字符串内容传给脚本,所以必然会报「No such file or directory」。
  • 用数组+heredoc出现「ambiguous redirect」,大概率是语法错误或误解了heredoc的用途——它是传递多行输入内容,不是传递命令行参数。

正确操作方式

场景1:构建脚本需要接收命令行参数(最常见)

直接将数组元素作为参数传递给脚本即可,Bash的数组展开"${SOURCES[@]}"会保留每个元素的原始格式(包括末尾的空格),不会被错误拆分:

# 1. 保留原数组声明(确保每个带空格的文件名都用双引号包裹)
SOURCES=( 
"../../header1.h " 
"../../source1.cpp " 
"../../header2.h " 
"../../header3.h " 
"./main.cpp"
)

# 2. 直接传递数组给构建脚本
bash my_build_script.sh "${SOURCES[@]}"

在构建脚本my_build_script.sh中,可通过$@获取所有传递的文件名参数,示例:

# my_build_script.sh 示例内容
for file in "$@"; do
    echo "处理文件:$file"
    # 此处编写你的构建逻辑
done

场景2:构建脚本需要从标准输入读取文件名列表

如果脚本是通过读取标准输入获取文件名(比如用while read循环),可以用printf把数组元素逐行输出,再通过管道传给脚本:

printf "%s\n" "${SOURCES[@]}" | bash my_build_script.sh

或者用heredoc传递(需转义文件名末尾的空格):

bash my_build_script.sh <<EOF
${SOURCES[@]// /\\ }
EOF

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 07:18:23