добавить префикс к рекурсивно раскрытой переменной в оболочке - PullRequest
0 голосов
/ 15 апреля 2019

у меня есть:

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 перед каждым и любым docker-compose, например, результат должен быть

-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 

Может ли кто-нибудь мне помочь

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Вы можете использовать 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.yml
1 голос
/ 15 апреля 2019

У вас есть несколько проблем.Вы не создаете массив, вы создаете длинную строку в качестве первого элемента.Чтобы создать массив с командой в качестве каждого элемента, необходимо заключить значения, присвоенные массиву, в круглые скобки (...), например,

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 для циклического повторения по каждому индексу, присваивая "-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

Сообщите мне, если у вас есть дополнительные вопросы.

Редактирование каждого запроса в одной строке

Информация хранится в массиве по мере необходимости.Вы помещаете это в любом формате, который вам нравится, например, «все в одну строку»

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 ......".

Дайте мне знать, если это не поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...