我想決議一個mediainfo輸出并將每一行分配給它自己的變數。
我的問題是,如果輸出的行數發生變化,那么 var 的邏輯值也會發生變化。
#!/usr/bin/env bash
function tester_mediainfo() {
#this must be done with the hard new line, its a mediainfo quirk
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%"
maker=$(mediainfo --Output="$template" "$1" | sed 's/video\///g' | tr '|' '\n '| awk '{ print $1 }')
read -r A B C D E F G H I J K L M N< <(echo $maker)
}
tester_mediainfo $1
我希望能夠輸出一個變數串列以供以后在IF陳述句中使用,因此它們的邏輯含義不能改變!
假設腳本輸出:
output: variable:
15.7 A
25.000 B #this changes
16:9 C
MBAFF D
25.000 E #this changes
4:2:0 F
8 G
H264 H
AVC I
High J
CABAC K
那是 11 行輸出。
現在,如果我在不同的媒體檔案上再次運行腳本,會發生什么:
output: variable:
10.5 A
16:9 B
Progressive C
4:2:0 D
8 E
H264 F
AVC G
[email protected] H
CABAC I
Constant J
10 K
25.000 FPS(第 2 行),它將分配給 var B
16:9縱橫比(第 2 行),它將分配給 var B 應該為空
uj5u.com熱心網友回復:
如你依靠word splitting的read命令,succesive空值放在一起的原因不一致的結果。
你能不能試試:
# no changes in your original template
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%"
mapfile -t info < <(mediainfo --Output="$template" "$1" | sed 's/video\///g' | tr '|' '\n' | awk '{ print $1 }')
for i in "${info[@]}"; do
echo "$i"
done
的mapfile內置命令讀取來自標準輸入分配一個陣列(行info這里)到每個行。它保留空行,as is然后結果始終具有相同的長度。如果要將單個標量變數分配給陣列元素,可以這樣說:
A="${info[0]}"
B="${info[1]}"
C="${info[2]}"
...
盡管將陣列視為陣列會更方便。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/333624.html
標籤:猛击
下一篇:sh中的壞替換bash等價物
