gpt4 book ai didi

bash - docker入口点bash脚本中行首的冒号

转载 作者:IT老高 更新时间:2023-10-28 12:45:35 25 4
gpt4 key购买 nike

我正在查看 an entrypoint script for a docker image他们有以下几行(53-54)

: ${POSTGRES_USER:=postgres}
: ${POSTGRES_DB:=$POSTGRES_USER}

我看到了这个帖子 What is the purpose of the : (colon) GNU Bash builtin?

并且能够弄清楚 : 的含义是正确的,并且 := 用于分配默认值,但它并没有真正触及 : 至少在这种特定情况下位于行首。

最佳答案

在 Bourne shell 和 Bash 等衍生工具中,: 是一个无操作命令:也就是说,它不执行任何操作,但会正常评估参数。将此与注释 (#) 进行对比,该注释根本不执行任何操作(# 之后的所有内容都将被忽略)。

这个语法:

: ${POSTGRES_USER:=postgres}

通常用于为变量分配默认值。语法 ${POSTGRES_USER:=postgres} (a) 将变量 POSTGRES_USER 设置为 postgres 仅当还没有值,然后将 (b) 评估为 $POSTGRES_USER 的值。如果我们使用注释:

# ${POSTGRES_USER:=postgres}

...什么都不会发生,因为 shell 只是忽略了整行。使用 : 意味着 ${...} 表达式仍会被计算,因此如果需要,POSTGRES_USER 会被赋值。

更新

如果行首没有:,则为:

${POSTGRES_USER:=postgres}

将是一个 shell 命令! shell 将首先评估变量扩展并提出类似 postgres 的内容,因此您将拥有一个实际上看起来像这样的 shell 脚本:

postgres

这可能会给你错误:

bash: postgres: command not found...

关于bash - docker入口点bash脚本中行首的冒号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32342841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com