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

Bash数组无法输出值:摄像头RTSP流结果存储异常排查

问题描述

用户拥有4个摄像头,想要将每个摄像头RTSP流的检测结果存入空数组,之后读取数组元素。执行脚本后,echo ${outputcodes[0]}与echo ${outputcodes}均无输出;但循环内echo $streamresults能得到正确的0值。尝试过outputcodes+=($streamresults)及不同数组声明方式都无效,使用的Bash版本为4.2.46(2)-release,原脚本如下:

# streams to check
streams=("rtsp://Streaming/Channels/01" "rtsp://Streaming/Channels/201" "rtsp://Streaming/Channels/301" "rtsp://Streaming/Channels/401")
# declare array for stream codes
declare -a  outputcodes
       
for stream in "${streams[@]}"; do
   streamoutput=$(timeout 20s ffprobe -v quiet -print_format json -show_streams $stream)
   # get output code for each stream  
   streamresults=$(jq -r '.streams[0].index' <<< "$streamoutput")
  # add stream result to array          
  outputcodes+=$streamresults
done
exit 0
# get first array member result   
echo ${outputcodes[0]}
问题原因
  1. 数组追加语法错误:原脚本用outputcodes+=$streamresults是把内容直接追加到数组第一个元素的末尾,而非添加新的数组元素。正确的数组追加语法需要用括号包裹元素,写成outputcodes+=("$streamresults")。
  2. 脚本提前退出:循环结束后立刻执行exit 0,导致后续的echo ${outputcodes[0]}语句根本不会被执行,这是无输出的核心原因。
修正后的脚本
# streams to check
streams=("rtsp://Streaming/Channels/01" "rtsp://Streaming/Channels/201" "rtsp://Streaming/Channels/301" "rtsp://Streaming/Channels/401")
# declare array for stream codes
declare -a outputcodes
       
for stream in "${streams[@]}"; do
   streamoutput=$(timeout 20s ffprobe -v quiet -print_format json -show_streams "$stream")
   # get output code for each stream  
   streamresults=$(jq -r '.streams[0].index' <<< "$streamoutput")
  # add stream result to array          
  outputcodes+=("$streamresults")
done
# get first array member result   
echo ${outputcodes[0]}
# 打印整个数组验证所有元素
echo "${outputcodes[@]}"
exit 0
修正说明
  • 移除了循环后的exit 0,确保后续的输出语句能正常执行;
  • 将数组追加语句改为outputcodes+=("$streamresults"),正确向数组添加新元素;
  • 给ffprobe的$stream变量添加引号,避免URL中存在特殊字符时出现解析错误;
  • 新增打印整个数组的语句,方便验证所有检测结果是否正确存入数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:25:31