"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원본 파일(사용자 파일 등)의 교체는 함수 외부에서 수행됩니다.

관련 정보