我正在尝试编写一个脚本来解压缩当前目录中的所有文件,如下所示。
这个简单的循环扩展 *.zip
,并解压缩每个 f
。
for f in *.zip
do
unzip -o $f
done
但是,当 *.zip
模式为空时,即当前目录中没有 zip 文件时,我收到错误:
unzip: cannot find or open *.zip, *.zip.zip or *.zip.ZIP.
我不明白为什么 bash 在模式为空时会以不同的方式处理它。在我看来,模式 *.zip
当为空时被视为字符串文字,当非空时被视为正确的模式。
我的问题是,如何修复脚本以便它也可以处理空模式?
谢谢
最佳答案
最简单的方法是shopt -s nullglob
。如果没有找到文件,那么 bash 会将 *.foo
扩展为空。不过,这个 shell 选项是一个 bashism,所以替代方法是检查该值是否实际上是一个文件:
#!/bin/sh
for f in *.zip; do
[ -f "$f" ] && unzip -o "$f"
done
关于bash - bash 中的空模式有不同的处理方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226717/