[英]Escape a variable in bash headache
我創建了一個腳本,以便自動將攝像機的視頻從DV轉換為mkv。但是,由於它無法正確轉義filename變量,因此無法使其正常工作。 腳本是:
#!/bin/bash
FTITLE="Tapes 2012, Tape 01 - "
i=1;
find ./ -type f -name "dv_*.dv" | while read fname; do
CTIME=`stat -c %Y ${fname}`
FNAME="${FTITLE} - ${i}.mkv"
/usr/bin/ffmpeg -i ${fname} ${x264_OPTIONS} ./"$FNAME"
let i=$i+1
done
運行腳本時,出現以下錯誤:
[NULL @ 0x645f40] Unable to find a suitable output format for '2012,'
2012,: Invalid argument
顯然,這是腳本和文件名的問題。 我試圖逃脫
/usr/bin/ffmpeg -i ${fname} ${x264_OPTIONS} ./"\"$FNAME\""
但它也不起作用。
使用更多報價!!! 引用您擁有的每個變量!
代替您的腳本,我將執行以下操作:
#!/bin/bash
ftitle="Tapes 2012, Tape 01 - "
x264_options=( your options here in an array that is good practice "and quote if you have an option with spaces" )
shopt -s globstar
shopt -s nullglob
((i=1))
for fname in **/dv_*.dv; do
[[ -f $fname ]] || continue
ctime=$(stat -c %Y "$fname")
fnameuppercase="$ftitle - $i.mkv"
/usr/bin/ffmpeg -i "$fname" "${x264_options[@]}" ./"$fnameuppercase"
((++i))
done
與您的有一些差異:
find
:使用bash的glob代替, $(...)
命令替換, ((...))
, while
循環在子shell中執行)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.