ai didi

bash - 如何通过环境变量传递带空格的参数?

转载 作者:行者123 更新时间:2023-11-29 09:50:39 24 4
gpt4 key购买 nike

在 bash shell 上,我想通过环境变量传递参数。像这样……

$ export DOCKER_OPTIONS="-p 9200:9200 -e ES_JAVA_OPTS='-Xmx1g -Xms1g' -d "
$ docker run -d $DOCKER_OPTIONS elasticsearch

我希望“ES_JAVA_OPTS='-Xmx1g -Xms1g'”作为选项值“-e”传递。但是我找不到办法。

$ set -x
$ docker run -d $DOCKER_OPTIONS elasticsearch
+ docker run -d -p 9200:9200 -e 'ES_JAVA_OPTS='\''-Xmx1g' '-Xms1g'\''' elasticsearch
unknown shorthand flag: 'X' in -Xms1g'

这将 -Xms1g 分隔为另一个选项。

$ docker run -d "$DOCKER_OPTIONS" elasticsearch
+ docker run -d '-p 9200:9200 -e ES_JAVA_OPTS='\''-Xmx1g -Xms1g'\''' elasticsearch
docker: Invalid containerPort: 9200 -e ES_JAVA_OPTS='-Xmx1g -Xms1g'.

这将参数捆绑在一起。

我该怎么办?

最佳答案

使用数组来规避这些尴尬的解析问题。数组很棒,因为在定义它们时不需要做任何特殊引用。唯一需要注意引号的地方是在扩展引号时:始终在 "${array[@]}" 周围加上引号。

dockerOptions=(-p 9200:9200 -e ES_JAVA_OPTS='-Xmx1g -Xms1g' -d)
docker run -d "${dockerOptions[@]}" elasticsearch

请注意,不需要 export,因为您是通过其命令行而不是作为环境变量将选项传递给 docker。

此外,所有大写名称都保留给 shell。最好在定义您自己的变量时避免使用它们。

关于bash - 如何通过环境变量传递带空格的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47179199/

24 4 0
文章推荐: java - 使用 Java,您使用私有(private)方法吗?你使用静态方法吗?
文章推荐: java - 递归 - 它做了什么
文章推荐: java - Android开发-数据库插入空指针异常
文章推荐: bash - 为什么子 shell 中的 stderr 没有被抑制或重定向?
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com