Bash中的多个条件和globbing
那么我说对了吗?在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兼容性,请使
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兼容性,[[[…| |…]]
在处理空变量和可读性方面具有优势。谢谢,但我已经在双括号中使用了单条件测试。最简单的方法是完全删除引号。