如何将docker-entrypoint中逗号分隔的变量转为空格分隔后写入配置?
完全可以实现,优先推荐用Bash内置的变量替换语法处理,无需额外调用工具,性能更高也更简单。
方案1:Bash参数扩展(适用绝大多数Docker基础镜像环境)
直接在原sed命令中修改变量引用的写法即可,${变量名//旧字符/新字符}是Bash自带的全局替换语法:
if [[ -v SERVICE_NAMES ]]; then sudo sed -i -e "s#%SERVICE_NAMES%#${SERVICE_NAMES//,/ }#g" /etc/someservice/someconfig.file else echo "SERVICE_NAMES variable not set, unable to write config without" exit 1 fi
语法说明:${SERVICE_NAMES//,/ }里的双斜杠代表全局替换,会把变量中所有逗号都替换为空格,若只写单斜杠${SERVICE_NAMES/,/ }则只会替换第一个逗号。
方案2:兼容POSIX Shell的写法
如果你用的镜像默认是极简sh环境不支持上述Bash语法,可以提前用sed处理变量内容:
if [[ -v SERVICE_NAMES ]]; then # 提前将变量中的逗号替换为空格后赋值给新变量 SERVICE_SPACED=$(echo "$SERVICE_NAMES" | sed 's/,/ /g') sudo sed -i -e "s#%SERVICE_NAMES%#$SERVICE_SPACED#g" /etc/someservice/someconfig.file else echo "SERVICE_NAMES variable not set, unable to write config without" exit 1 fi
注意事项
如果你的SERVICE_NAMES变量值里包含#字符,需要把sed命令里的分隔符#替换为其他不会出现在变量值中的字符,比如|、~等,避免触发sed语法错误。
内容的提问来源于stack exchange,提问作者user16071428
相关产品推荐
相关产品推荐

