![使用从“for“file”in”获得的变量“file”并传递给另一个脚本失败](https://linux22.com/image/63008/%E4%BD%BF%E7%94%A8%E4%BB%8E%E2%80%9Cfor%E2%80%9Cfile%E2%80%9Din%E2%80%9D%E8%8E%B7%E5%BE%97%E7%9A%84%E5%8F%98%E9%87%8F%E2%80%9Cfile%E2%80%9D%E5%B9%B6%E4%BC%A0%E9%80%92%E7%BB%99%E5%8F%A6%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC%E5%A4%B1%E8%B4%A5.png)
我正在尝试搜索.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 语句中的列表返回为空。