![“if 语句”中允许这样做吗?](https://linux22.com/image/154195/%E2%80%9Cif%20%E8%AF%AD%E5%8F%A5%E2%80%9D%E4%B8%AD%E5%85%81%E8%AE%B8%E8%BF%99%E6%A0%B7%E5%81%9A%E5%90%97%EF%BC%9F%20.png)
# optional cropping
if [ "$1" == "cropit" ]; then
ITS_CROP_TIME=
mkdir cropped; for i in *.mp4; do ffmpeg -i "$i" -filter:v "crop=1920:980:0:-100" cropped/"${i%.*}.mp4"
rm -r *.mp4
cd cropped
cp -r *.mp4 ../
fi
# optional cropping
我是否可以以这种方式使用ITS_CROP_TIME=
字符串(以捕获下面代码的输出)?如果我现在将此变量放置在脚本中的某个位置,命令是否会在变量定义处执行?
那这个呢?这行得通吗?
if [ "$1" == "cropit" ]; then
ITS_CROP_TIME=mkdir cropped; for i in *.mp4; do ffmpeg -i "$i" -filter:v "crop=1920:980:0:-100" cropped/"${i%.*}.mp4"; rm -r *.mp4; cd cropped; cp -r *.mp4 ../
fi
答案1
#!/bin/bash
set -e
if [ "$1" == "cropit" ]; then
ITS_CROP_TIME="$(
mkdir cropped;
for i in *.mp4; do
ffmpeg -i "$i" -filter:v "crop=1920:980:0:-100" cropped/"${i%.*}.mp4"
done
rm -r ./*.mp4
cd cropped
cp -r ./*.mp4 ../
)"
fi
答案2
我假设您希望将变量设置ITS_CROP_TIME
为命令集合以便稍后运行?
这就是函数的用途:
crop_all_in_dir () {
local source_dir="$1"
local dest_dir="$2"
mkdir -p "$dest_dir"
for file in "$source_dir"/*.mp4; do
[ ! -f "$file" ] && continue
ffmpeg -i "$file" -filter:v "crop=1920:980:0:-100" "$dest_dir/(basename "${file%.*}").mp4"
done
}
然后您可能想稍后在脚本中调用它
# optional cropping
if [ "$1" = "cropit" ]; then
crop_all_in_dir . cropped
fi
即,裁剪*.mp4
当前目录中的所有文件并将裁剪后的文件放置在该cropped
目录(当前目录的子目录)中,如果输出目录尚不存在则创建该目录。
该函数以非破坏性方式进行裁剪,因此原始文件(您的cp
文件等)的任何替换都将从该函数外部完成。