使用从“for“file”in”获得的变量“file”并传递给另一个脚本失败

使用从“for“file”in”获得的变量“file”并传递给另一个脚本失败

我正在尝试搜索.mkv当前文件夹中的所有文件,然后使用mediainfo我想将height其元数据放入变量中,但似乎失败了。

这个片段:

height=$(mediainfo "input.mkv" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height;

工作得很好,如果我手动插入文件名,它会输出我想要的结果:

# height=$(mediainfo 'input.mkv' | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height;
Height : 720 pixels
720

但是,当我尝试将其放入我的目录中for file in以便不需要手动插入文件名时,它一直失败:

for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done 

变量的输出$height为空。

# for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done
(null)
(null)

我已经尝试过,更改"$file"'$file'$file,但它们都不起作用,我错过了什么吗?

答案1

你写的*.{mkv}不是*.mkv.因此,循环只会循环有关*.{mkv}不存在的一个“文件”。在这种情况下, 的输出mediainfo只是空的。

echo "$file"在循环中添加类似的内容来验证。

答案2

从“for file”部分中删除“{}”。应该是这样的:

for file in *.mkv; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done

在您的代码中,“*.{mkv}”扩展到所有以“.{mkv}”结尾的文件,我认为其中没有任何文件,因此 for 语句中的列表返回为空。

相关内容