首页 > 解决方案 > 在 Bash 中,如何根据单个字符变量的各种条件进行分支?

问题描述

考虑这个 Python 代码:

var = '1'
if var in '123':
    print('in 123')
elif var == 'x':
    print('is x')
elif var == 'y':
    print('is y')

一个人如何在 Bash 中干净利落地写这个?

标签: bashconditional-statements

解决方案


Bash 和 POSIX 的等价物是case.

然后,您的 Python 示例将转换为:

var='1'
case "${var}"
in
  [123])
    printf 'in 123\n'
    ;;
  x)
    printf 'is x\n'
    ;;
  y)
    printf 'is y\n'
    ;;
esac

您可以在模式中使用POSIX 模式匹配(又名 glob),例如*foo*) printf 'contains foo\n'.

并且默认的“案例”(default其他语言的switch构造)将是*).


推荐阅读