“if 语句”中允许这样做吗?

“if 语句”中允许这样做吗?
# 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

https://www.shellcheck.net/

答案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文件等)的任何替换都将从该函数外部完成。

相关内容