我有一個用於linux上screencasting的文件,我想根據用戶輸入修改它的一部分。目前我甚至無法讓它在變量的命令中插入一個參數。將變量作爲命令參數插入到bash腳本中
#!/bin/bash -x
fps="30"
capturesize="hd1080"
outputsize="720"
filter=-vf 'scale=${outputsize}'
avconv \
-f x11grab -r $fps -s $capturesize -i :0.0 \
-f alsa -ac 2 -i pulse \
-f alsa -ac 2 -i pulse \
-f alsa -ac 1 -i pulse \
-map 0:0 -map 1:0 -map 2:0 -map 3:0 \
-vcodec libx264 \
$filter \
-pre:v lossless_ultrafast \
-acodec libmp3lame \
-threads 4 \
-y [email protected]
$fps
和$capturesize
正確評價,但$filter
分配給了一個可愛的小:
+ filter=-vf
+ 'scale=${outputsize}'
~/bin/screencap: line 9: scale=${outputsize}: command not found
更改行:
filter="-vf 'scale=$outputsize'"
給出了一個更加不舒服:
+ filter='-vf '\''scale=720'\'''
+ avconv -f x11grab [...] -vf ''\''scale=720'\''' [...]
[...]
No such filter: 'scale=720'
Error opening filters!
這...工作。我不知道爲什麼或者如何,當空格插入到vf值時,它會自動添加引號!... Bash似乎非常不可預知,很高興SO是如此充滿了bash高手:P – 2013-03-24 23:33:17
當數組展開時* in引號*使用'[@]'索引運算符,數組中的每個元素都被引用,因此它被視爲單個單詞。 – chepner 2013-03-24 23:45:41