Bash中的多个条件和globbing

Bash中的多个条件和globbing,bash,scripting,glob,Bash,Scripting,Glob,那么我说对了吗?在Bash中,如果在条件周围使用双括号,我可以使用globbing测试字符串的模式: if [[ $var = abc* ]] 如果我使用单括号,我可以测试多个条件: if [ $var = abc123 -o $var = abc456 ] 但我不可能同时做到这两件事 我使用的是Bash v3.0,因此它无法识别正则表达式或=~运算符。尝试以下方法: if [[ $var == "abc"* ]] 我在那里找到了答案POSIX标准不推荐使用-o。对于POSIX兼容性,请使

那么我说对了吗?在Bash中,如果在条件周围使用双括号,我可以使用globbing测试字符串的模式:

if [[ $var = abc* ]]
如果我使用单括号,我可以测试多个条件:

if [ $var = abc123 -o $var = abc456 ]
但我不可能同时做到这两件事

我使用的是Bash v3.0,因此它无法识别正则表达式或=~运算符。

尝试以下方法:

if [[ $var == "abc"* ]]

我在那里找到了答案

POSIX标准不推荐使用
-o
。对于POSIX兼容性,请使用两个单独的
test
命令:

if [ "$var" = abc123 ] || [ "$var" = abc456 ]
bash
中,您可以使用
[…]
[…]]
命令执行相同的操作,或者在
[…]
命令中使用
|

if [ "$var" = abc123 ] || [ "$var" = abc456 ]  # POSIX compatible

# No reason to use either of the next three, but the syntax is valid
if [[ "$var" = abc123 ]] || [ "$var" = abc456 ]
if [ "$var" = abc123 ] || [[ "$var" = abc456 ]]
if [[ "$var" = abc123 ]] || [[ "$var" = abc456 ]]

if [[ "$var" = abc123 || "$var" = abc456 ]]    # Preferred for bash

如果[[“$MACHTYPE”==“x86_64--netbsd”&“$OSTYPE”==“netbsd”]
在我的bashrc中工作得非常好。
=~
应该在3.0中可用。@chepner-检查后,您是对的。我不知道为什么我认为不是。谢谢。我刚刚在这里发现了另一个问题,建议使用双管,我想回到这里回答我自己的问题,但你抢先回答了我。
-o
选项已经存在很长时间了。为什么不使用它呢?现在是否严格需要生成符合POSIX的脚本?只是一个想法。
-o
涉及到解析歧义;POSIX规范本身不赞成它的使用,并建议用
[…]|[…]
代替它。如果您不关心POSIX兼容性,
[[[…| |…]]
在处理空变量和可读性方面具有优势。谢谢,但我已经在双括号中使用了单条件测试。最简单的方法是完全删除引号。