Bash

這在“if 語句”中是否允許?

  • December 16, 2020
# 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
#!/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/

我假設您想將該變數設置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等)的任何替換都將在該功能之外完成。

引用自:https://unix.stackexchange.com/questions/520982