如何在Bash中为mediainfo固定格式输出绑定逻辑含义固定的变量
解决方案
原脚本用tr '|' '\n '加awk '{print $1}'的处理逻辑会直接丢弃空字段,导致字段数量随媒体文件属性变化,最终变量赋值错位。修改后会保留空字段占位,原有变量的逻辑对应关系完全不变,不会出现错位问题。
修改后可直接使用的代码
#!/usr/bin/env bash function tester_mediainfo() { # 原有模板完全保留,字段顺序不变 template="General;%OverallBitRate/String%| Video;%Width%|%Height%|%FrameRate/String%|%DisplayAspectRatio/String%|%ScanType/String%|%FrameRate/String%|%ChromaSubsampling/String%|%BitDepth%|%InternetMediaType%|%Format/String%|%Format_Profile%|%Format_Settings%|%BitRate_Mode/String%|%BitRate_Nominal/String%|%BitRate_Maximum/String%|%ColorSpace%| Audio;%BitRate/String%|%Format/String%|%Channel(s)/String%|%BitRate_Mode/String%|%BitRate/String%|%SamplingRate/String%" # 仅替换video/前缀,保留所有|分隔的原始字段,包括空值 raw_output=$(mediainfo --Output="$template" "$1" | sed 's/video\///g') # 直接用|作为分隔符读取,空字段会自动赋值为空字符串,不会占用后续字段位置 IFS='|' read -r A B C D E F G H I J K L M N _ <<< "$raw_output" # 变量顺序和模板字段顺序严格对应,原有逻辑完全不需要改动 } # 传入路径加双引号,兼容带空格的文件名 tester_mediainfo "$1"
关键修改说明
- 移除了会丢弃空值的
tr、awk处理步骤,从根源避免字段数量变化 - 直接用模板自带的
|作为分隔符读取,空字段会保留为空值,不会触发错位 - 原有A到N变量的业务含义完全和之前一致,你后续的IF判断逻辑不需要做任何修改
内容的提问来源于stack exchange,提问作者user9540477
相关产品推荐
相关产品推荐

