如何在Dockerfile的if条件语句中正确添加or逻辑判断
Dockerfile中if语句添加OR逻辑的正确写法
正确的实现方式有三种,兼容性从高到低排列:
第一种:多独立判断拼接(兼容性最高,所有shell环境均支持)
将两个独立的条件判断用||直接拼接即可,示例如下:
RUN if [ 条件1 ] || [ 条件2 ] ; then \ command 1; \ else \ command 2; \ fi
实际使用示例(判断环境变量ENV为dev或者test):
RUN if [ "$ENV" = "dev" ] || [ "$ENV" = "test" ] ; then \ echo "测试环境"; \ else \ echo "生产环境"; \ fi
第二种:单中括号[]搭配-o参数(单中括号原生OR参数,兼容性较好)
单中括号语法内的OR逻辑用-o参数实现,不能用|或者||,示例如下:
RUN if [ 条件1 -o 条件2 ] ; then \ command 1; \ else \ command 2; \ fi
实际使用示例:
RUN if [ "$ENV" = "dev" -o "$ENV" = "test" ] ; then \ echo "测试环境"; \ else \ echo "生产环境"; \ fi
第三种:双中括号[[ ]]搭配||(写法最直观,需基础镜像支持标准shell)
如果你的基础镜像包含bash、dash等标准shell,可以用更易懂的双中括号语法:
RUN if [[ 条件1 || 条件2 ]] ; then \ command 1; \ else \ command 2; \ fi
实际使用示例:
RUN if [[ "$ENV" = "dev" || "$ENV" = "test" ]] ; then \ echo "测试环境"; \ else \ echo "生产环境"; \ fi
注意事项
- 你原有代码中
else; then是错误语法,else后不需要加then - 条件内容和括号之间必须保留空格,变量建议用双引号包裹,避免空值或带空格的变量引发语法错误
- 单中括号内不能直接用
||,也不要用|(|是管道符,不是逻辑或)
内容的提问来源于stack exchange,提问作者begs
相关产品推荐
相关产品推荐

