如何在bash条件表达式中控制特殊参数*输出并解决参数过多问题?
解决bash中判断文件名是否包含指定字符串的问题
问题根源
你原来的命令里,*.l*会被bash自动做通配符扩展,替换成当前目录下所有名字匹配*.l*的文件列表,导致test命令收到远超预期的参数,触发too many arguments错误。
正确解决方案
方法1:使用bash内置条件表达式[[ ]](推荐)
这是bash最简洁的写法,通配符仅作为字符串匹配模式,不会被展开为文件:
if [[ $FI == *.l* ]]; then command1 # 替换为你的实际命令 else command2 # 替换为你的实际命令 fi
方法2:使用case语句(POSIX兼容)
如果需要在非bash的POSIX shell中运行,case语句是更通用的选择:
case "$FI" in *.l*) command1 ;; *) command2 ;; esac
方法3:使用bash正则匹配
如果你习惯用正则表达式,也可以用=~运算符:
if [[ $FI =~ \.l ]]; then command1 else command2 fi
注意:正则里的.是特殊字符,需要用\转义,确保匹配的是字面意义的点号。
内容的提问来源于stack exchange,提问作者Evgeny
相关产品推荐
相关产品推荐

