Shell: Как добавить префикс во время цикла по массиву? - PullRequest
5 голосов
/ 27 апреля 2011

Я пытаюсь перебрать массив и добавить префикс к каждому значению в массиве. Упрощенная версия кода:

#!/bin/sh
databases=( db1 db2 db3 )
for i in live_${databases[@]} stage_${databases[@]}
do
    ....
done

Однако, он добавляет префикс только к первому значению в массиве - значения, через которые он проходит:

live_db1 db2 db3 stage_db1 db2 db3

Есть мысли? Спасибо.

Ответы [ 4 ]

15 голосов
/ 27 апреля 2011
databases=( db1 db2 db3 )
for i in ${databases[@]/#/live_} ${databases[@]/#/stage_}
do
    ....
done
1 голос
/ 27 апреля 2011
for i in $( for d in ${databases[@]}; do echo "live_$d stage_$d"; done )
do
    ....
done
1 голос
/ 27 апреля 2011

Попробуйте что-то вроде этого:

#!/bin/sh
databases="db1 db2 db3"
for i in $databases
do
    x="live_$i"
    y="stage_$i"
    echo "$x $y"
done
0 голосов
/ 11 января 2014

Просто добавляю к Джону Кугельману ответ.Подробности можно найти в:

Страница man bash -> Расширение параметров -> Замена шаблона

... Если шаблон начинается с #, он должен совпадатьв начале расширенного значения параметра....

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