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

Bash 为什么lsof错误地解释了我的变量?,bash,function,variables,lsof,Bash,Function,Variables,Lsof,我正试图设置一个循环来监视苹果压缩机正在编写的文件。一旦文件不再被写入,我想更改它所在目录的名称。但是,当我将包含filepath的变量馈送到lsof时,它会显示为乱码 例如,存储为$Output的“/Users/leftright/Desktop/Output/${process##*/}\u PROCESSING/”被lsof解释为DHt\x96?\x7f。在lsof手册页中,我看不到任何东西可以说明发生这种情况的原因。它是在函数中的if/then语句中调用的 #!/bin/bash co

我正试图设置一个循环来监视苹果压缩机正在编写的文件。一旦文件不再被写入,我想更改它所在目录的名称。但是,当我将包含filepath的变量馈送到
lsof
时,它会显示为乱码

例如,存储为
$Output
“/Users/leftright/Desktop/Output/${process##*/}\u PROCESSING/”
lsof
解释为
DHt\x96?\x7f
。在
lsof
手册页中,我看不到任何东西可以说明发生这种情况的原因。它是在函数中的if/then语句中调用的

#!/bin/bash

compressor() {
    filepath="$1"
    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”前面留下了空格,这导致它的评估不正确。Cyrus对shellcheck.net的建议发现了问题。

请看一看:谢谢Cyrus!这是一个非常好的资源。我已将其添加到我的书签中。