В bash у меня есть массив с именами путей, и я хотел бы заменить каждый из них разными, используя sed, например:
sed 's@^(.*?)master_repo(.*?)@\1"${SOME_REPO_NAME}"\2@g' <<< ${FULL_TGT_DIRS[${i}]}
Пример пути, который является элементом массива, будет таким:
/Volumes/munki/master_repo/pkgs/apps
Я хотел бы заменить имя пути «master_repo», например, на «somedir», которое хранится в $SOME_REPO_NAME
, поэтому я получаю:
/Volumes/munki/somedir/pkgs/apps
Или со встроенной заменой строк:
for i in ${FULL_TGT_DIRS[@]}
do
FULL_TGT_DIRS[$i]=${FULL_TGT_DIRS[$i]/master_repo/$SOME_REPO_NAME}
#sed 's@^(.*?)master_repo(.*?)@\1"${SOME_REPO_NAME}"\2@g' <<< ${FULL_TGT_DIRS[${i}]}
done
Я всегда получаю следующую ошибку при запуске моего скрипта:
> /usr/local/bin/repomgr: line 135:
> /Volumes/munki/master_repo/pkgs/apps: syntax error: operand expected
> (error token is "/Volumes/munki/master_repo/pkgs/apps")
Я пробовал использовать разные разделители и параметры sed, а также перебирать разные созвездия цитат. Я не пишу сценарии bash ежедневно, так что, возможно, я что-то упускаю?
Кстати, я запускаю это на Mac, поэтому в моем распоряжении только bash 3.2.