我正在尝试搜索.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 语句中的列表返回为空。