为什么 lsof 会错误地解释我的变量?

Why does lsof interpret my variables incorrectly?

我正在尝试设置一个循环来监视 Apple Compressor 正在写入的文件。一旦文件不再被写入,我想更改它所在目录的名称。但是,当我将包含文件路径的变量提供给 lsof 时,它会出现乱码。

例如,存储为 $output"/Users/leftright/Desktop/Output/${process##*/}_PROCESSING/"lsof 解释为 DHt\x96?\x7f。我在 lsof 联机帮助页中看不到任何内容来说明为什么会这样。它在函数内的 if/then 语句中被调用。

#!/bin/bash

compressor() {
    filepath=""
    process="${filepath%.*}"
    output="/Users/leftright/Desktop/Output/${process##*/}_PROCESSING/"
    filename="${filepath##*/}"
    moving="${output}""${filepath##*/}"
    cleanname="${filename%.*}"
    final= "${output}""${cleanname}".mp4
    completed="/Users/leftright/Desktop/Output/${process##*/}_COMPLETED/${cleanname}.mp4"
    mkdir -m 777 "$output";
    mv "$filepath" "$moving";
    /Applications/Compressor.app/Contents/MacOS/Compressor -computergroup "This Computer" -jobpath "$output""$filename" -settingpath /Users/leftright/Documents/CONVERTHQTEST.cmprstng -locationpath "$final";
    while true; do
        if lsof "$final" > /dev/null; then
            sleep 1
        else
            mv "$final" "$completed"
        fi
    done
}
export -f compressor
fswatch -0 -v --event Created /Users/leftright/Desktop/Watch | xargs -0 -n1 -I filepath bash -c 'compressor "filepath"'

我做错了什么?

对于那些在家里玩的人,我在 final= "${output}""${cleanname}".mp4 前面留下了空格,导致它被错误地评估。赛勒斯 shellcheck.net 的建议找到了问题。