如何在BASH中的参数列表中转换命令的输出?

问题描述

我需要将多个参数传递给docker命令,但是我希望此参数字符串是交互式构建的,而不是手工构建的。在我的特定问题中,我想获取本机中的所有环境变量并将每个环境变量设置为build-arg参数。

例如,如果env变量是

ENV_VAR1=ENV_VALUE1
ENV_VAR2=ENV_VALUE2
ENV_VAR3=ENV_VALUE3

我想构建一个像这样的字符串

docker build --build-arg ENV_VAR1=ENV_VALUE1 --build-arg ENV_VAR2=ENV_VALUE2 --build-arg ENV_VAR1=ENV_VALUE1 .`

我想知道如何将这种重复包装在bash脚本中,如下所示(请问这只是一个代码):

docker build $(FOREACH get_output_of_env() AS $env DO `--build-arg $env` END) .

那有可能吗?

预先感谢

解决方法

使用数组:

dockerargs=()
for i in ENV_VAR1 ENV_VAR2 ENV_VAR3; do
     dockerargs+=(--build-arg "$i=${!i}")
done
docker build "${dockerargs[@]}" ...

如果您真的想使用how to iterate over env并执行for i in $(compgen -e)

,
#!/bin/sh

cat > args < EOF
#!/bin/sh
EOF
env -0 >> args
sed -i s'@^@--build-arg @g' args
tr '\n' ' '
sed -i s'@^@docker build@' args

然后只需将“ args”作为另一个外壳脚本执行即可。我承认我还没有测试过,但是我看不出太多原因导致它不起作用。