我有:
COMP_FILE+=docker-compose.con-etl.yml
COMP_FILE+=${PWD}/docker-compose.abc.yml
COMP_FILE+=${PWD}/docker-compose.cde.yml
COMP_FILE+=${PWD}/docker-compose.efg.yml
COMP_FILE+=${PWD}/docker-compose.hij.yml
COMP_FILE+=${PWD}/docker-compose.klm.yml
COMP_FILE+=${PWD}/docker-compose.nmo.yml
COMP_FILE+=${PWD}/docker-compose.pqr.yml我需要在每个docker-compose之前添加-f,例如结果应该是
-f docker-compose.con-etl.yml -f ${PWD}/datahub/docker-compose.abc.yml -f ${PWD}/datahub/docker-compose.cde.yml -f ${PWD}/datahub/docker-compose.efg.yml -f ${PWD}/datahub/docker-compose.hij.yml -f ${PWD}/datahub/docker-compose.klm.yml -f ${PWD}/datahub/docker-compose.nmo.yml -f ${PWD}/datahub/docker-compose.pqr.yml我正在使用下面的命令,但无法获得所需的结果
COMPOSE_FILE_ARGS=$(echo ${COMPOSE_FILE[@]/#/-f })
-f docker-compose.con-etl.yml${PWD}/datahub/docker-compose.abc.yml${PWD}/datahub/docker-compose.cde.yml${PWD}/datahub/docker-compose.efg.yml${PWD}/datahub/docker-compose.hij.yml${PWD}/datahub/docker-compose.klm.yml${PWD}/datahub/docker-compose.nmo.yml${PWD}/datahub/docker-compose.pqr.yml 有人能帮我吗?
发布于 2019-04-16 02:12:12
你有几个问题。您不是在创建数组,而是在创建一个长字符串作为第一个元素。要使用命令作为每个元素创建数组,需要将分配给数组的值括在(...)括号中,例如
COMP_FILE+=(docker-compose.con-etl.yml)
COMP_FILE+=(${PWD}/docker-compose.abc.yml)
COMP_FILE+=(${PWD}/docker-compose.cde.yml)
COMP_FILE+=(${PWD}/docker-compose.efg.yml)
COMP_FILE+=(${PWD}/docker-compose.hij.yml)
COMP_FILE+=(${PWD}/docker-compose.klm.yml)
COMP_FILE+=(${PWD}/docker-compose.nmo.yml)
COMP_FILE+=(${PWD}/docker-compose.pqr.yml)要遍历将"-f "作为前缀添加到每个命令的数组,可以使用C风格的for循环遍历每个索引,并将"-f "指定为前缀:
for ((i = 0; i < ${#COMP_FILE[@]}; i++)); do
COMP_FILE[i]="-f ${COMP_FILE[i]}"
done要确认添加了前缀,只需输出结果数组,
for i in "${COMP_FILE[@]}"; do
echo "$i"
done输出
$ bash yamlfile.sh
-f docker-compose.con-etl.yml
-f /tmp/tmp-david/docker-compose.abc.yml
-f /tmp/tmp-david/docker-compose.cde.yml
-f /tmp/tmp-david/docker-compose.efg.yml
-f /tmp/tmp-david/docker-compose.hij.yml
-f /tmp/tmp-david/docker-compose.klm.yml
-f /tmp/tmp-david/docker-compose.nmo.yml
-f /tmp/tmp-david/docker-compose.pqr.yml如果您有进一步的问题,请告诉我。
按请求编辑一行中的所有内容
您可以根据需要将信息存储在数组中。你可以把它放在任何你喜欢的格式中,例如"all in one line“
echo "${COMP_FILE[@]}"
-f docker-compose.con-etl.yml -f /tmp/tmp-david/docker-compose.abc.yml -f /tmp/tmp-david/docker-compose.cde.yml -f /tmp/tmp-david/docker-compose.efg.yml -f /tmp/tmp-david/docker-compose.hij.yml -f /tmp/tmp-david/docker-compose.klm.yml -f /tmp/tmp-david/docker-compose.nmo.yml -f /tmp/tmp-david/docker-compose.pqr.yml您可以在任何需要的命令中简单地使用数组中所有元素的扩展,同时确保每个组件都是"-f ......"。
如果这对你不起作用,请告诉我。
发布于 2019-04-16 02:53:47
您可以使用cat和sed
$ cat <<'end' | sed 's/=/=" -f /;s/$/"/' > script.sh
COMP_FILE=docker-compose.con-etl.yml
COMP_FILE+=${PWD}/docker-compose.abc.yml
COMP_FILE+=${PWD}/docker-compose.cde.yml
COMP_FILE+=${PWD}/docker-compose.efg.yml
COMP_FILE+=${PWD}/docker-compose.hij.yml
COMP_FILE+=${PWD}/docker-compose.klm.yml
COMP_FILE+=${PWD}/docker-compose.nmo.yml
COMP_FILE+=${PWD}/docker-compose.pqr.yml
end然后对生成的script.sh进行源码获取:
$ . script.sh
$ echo $COMP_FILE
-f docker-compose.con-etl.yml -f /home/sergioro/docker-compose.abc.yml -f /home/sergioro/docker-compose.cde.yml -f /home/sergioro/docker-compose.efg.yml -f /home/sergioro/docker-compose.hij.yml -f /home/sergioro/docker-compose.klm.yml -f /home/sergioro/docker-compose.nmo.yml -f /home/sergioro/docker-compose.pqr.ymlhttps://stackoverflow.com/questions/55694773
复制相似问题