【问题标题】:How to split a environment variable based on delimiter in Docker如何在 Docker 中根据分隔符拆分环境变量
【发布时间】:2022-01-20 07:46:16
【问题描述】:

我正在尝试将以下字符串拆分为分隔符上的数组

str="We;Welcome;You;On;Javatpoint"

我设法在 bash 中找到了一个解决方案

#!/bin/bash  
#Example for bash split string by another string  
  
str="We;Welcome;You;On;Javatpoint"  
delimiter=";"  
s=$str$delimiter  
array=();  
while [[ $s ]];  
do  
array+=( "${s%%"$delimiter"*}" );  
s=${s#*"$delimiter"};  
done;  
declare -p array

结果

array=([0]="We" [1]="Welcome" [2]="You" [3]="On" [4]="Javatpoint")

我需要将字符串拆分为 Dockerfile 中的一个数组。

DOCKERFILE:

> FROM python:3.7-slim
> 
> ENV IN="We;Welcome;You;On;Javatpoint"

【问题讨论】:

  • 只是为了完整性:您的代码中不涉及环境变量。我不确定这是否会影响您的 docker 问题,因为您没有显示您的 dockerdefinition。您不能简单地将您的 shell 脚本放入您的 docker 中吗?

标签: bash docker shell dockerfile


【解决方案1】:

让 bash 进行拆分。

IFS=';' read -r -a array <<<"str"

或与readarray 类似,用于多行变量。

在 Dockerfile 中

如果您想使用 bash 功能,请首先确保您正在运行 Bash。 dockerfile 中的RUN 命令默认执行 /bin/sh(请参阅 dockerfile 参考文档),这可能不是 Bash,也可能不支持 Bash 数组。

在这种特定情况下,要与 /bin/sh 兼容,请将 ; 替换为换行符 (tr) 并将其作为换行符分隔的流读取,或者如果没有其他空格则使用分词。见https://mywiki.wooledge.org/BashFAQ/001

【讨论】:

  • 谢谢。这只返回“我们”,我怎样才能得到整个数组?
  • . This only returns "We" 该命令不应打印任何内容。
  • IFS=';' read -r -a array
  • echo $array 将只打印第一个数组元素。使用"${array[@]}"。重新阅读 bash 数组的介绍可能是个好主意。在上面的代码中,您使用了declare -p array。
  • 有没有办法打印所有这些?或者可以控制要打印的索引?
猜你喜欢
  • 1970-01-01
  • 2010-12-02
  • 2016-06-08
  • 1970-01-01
  • 2020-06-01
  • 2014-06-07
  • 1970-01-01
  • 2019-09-19
相关资源
最近更新 更多