如何在 Shell 脚本中为 "for" 语句使用 2 个变量
How to use 2 variable for "for" statement in Shell Script
我想使用 f 和 v 作为变量。 f *.mkv 和 v *.mp3
for f in *.mkv v in *.mp3; do
ffmpeg -i "$f" -i "$v" -vcodec copy merge_"$f"
done
我不知道该怎么做。我还是 bash shell 脚本的新手。
希望有人能帮助我。
如果 *.mp3
和 *.mkv
基本名称相同:
for f in *.mkv; do
mp3name="${f%.mkv}.mp3"
ffmpeg -i "$f" -i "$mp3name" -vcodec copy "merge_${f}"
done
如果您正在寻找一种方法来按照您的原始代码预期的方式循环变量,您可以这样做:
f=(*.mkv)
v=(*.mp3)
for((i=0;i<${#f[@]};i++));do
echo "${f[$i]} ${v[$i]}"
done
一般假设是,mkv
和 mp3
的文件数量相同。
或者如果文件具有相同的基本名称,您可以这样做:
for f in *.mkv;do
v="${f/%mkv/mp3}"
echo "$f $v"
done
在 "${f/%mkv/mp3}"
中 mkv
被替换为 mp3
最后。
有关详细信息,请参阅 Bash Parameter Expansion。
我想使用 f 和 v 作为变量。 f *.mkv 和 v *.mp3
for f in *.mkv v in *.mp3; do
ffmpeg -i "$f" -i "$v" -vcodec copy merge_"$f"
done
我不知道该怎么做。我还是 bash shell 脚本的新手。
希望有人能帮助我。
如果 *.mp3
和 *.mkv
基本名称相同:
for f in *.mkv; do
mp3name="${f%.mkv}.mp3"
ffmpeg -i "$f" -i "$mp3name" -vcodec copy "merge_${f}"
done
如果您正在寻找一种方法来按照您的原始代码预期的方式循环变量,您可以这样做:
f=(*.mkv)
v=(*.mp3)
for((i=0;i<${#f[@]};i++));do
echo "${f[$i]} ${v[$i]}"
done
一般假设是,mkv
和 mp3
的文件数量相同。
或者如果文件具有相同的基本名称,您可以这样做:
for f in *.mkv;do
v="${f/%mkv/mp3}"
echo "$f $v"
done
在 "${f/%mkv/mp3}"
中 mkv
被替换为 mp3
最后。
有关详细信息,请参阅 Bash Parameter Expansion。