我正在编写一个条件表达式,以检查是否存在一组所需的扩展名。如下所示:
if [ ! -f "${FILE}.ext1" ] || [ ! -f "${FILE}.ext2" ] || [ ! -f "${FILE}.ext3" ]; then
echo "Error: missing extensions"
exit
fi我试图通过使用一种更简单的全球化模式来做到这一点,例如:
if [ ! -f "${FILE}.{ext1,ext2,ext3}" ]; then ...但是这是不起作用的(如果我将它与ls -l这样的不同命令一起使用,就会起作用)。错误在哪里?是否有其他方法来简化上述条件表达式?
发布于 2019-09-17 09:55:41
这里有两个问题:
test -f命令不能处理多个参数。一个可行的解决办法是:
for F in "${FILE}."{ext1,ext2,ext3}; do
if [ ! -f "${F}" ]; then
echo "not found: ${F}"
fi
done还要确保在脚本顶部使用#!/bin/bash作为shebang,因为大括号扩展是一种bashism,并且脚本不会移植到其他shell。
https://stackoverflow.com/questions/57971302
复制相似问题