Объединить путь + список файлов к списку абсолютных файлов - PullRequest
1 голос
/ 21 декабря 2010

Если у меня есть эти данные в моем сценарии оболочки:

DIR=/opt/app/classes
JARS=a.jar:b.jar:c.jar

Как я могу объединить это в строку

/opt/app/classes/a.jar:/opt/app/classes/b.jar:/opt/app/classes/c.jar

в сценариях Shell / Bash?

Ответы [ 5 ]

10 голосов
/ 23 декабря 2010

Вот очень короткий:

$ echo "$DIR/${JARS//:/:$DIR/}"
/opt/app/classes/a.jar:/opt/app/classes/b.jar:/opt/app/classes/c.jar
0 голосов
/ 21 декабря 2010

Pure Optimized Bash 1-лайнер

IFS=:; set -- $JARS; for jar; do path+=$DIR/${jar}:; done; echo "$path" 

выход

/opt/app/classes/a.jar:/opt/app/classes/b.jar:/opt/app/classes/c.jar:
0 голосов
/ 21 декабря 2010

Используйте перевод и переберите результаты. Затем обрежьте символ результата «:» в начале строки.

#! /bin/bash

DIR=/opt/app/classes
JARS=a.jar:b.jar:c.jar

for i in $(echo $JARS | tr ":" "\n")
do
    result=$result:$DIR/$i
done
echo ${result#:} // Remove the starting :

Результат:

/opt/app/classes/a.jar:/opt/app/classes/b.jar:/opt/app/classes/c.jar
0 голосов
/ 21 декабря 2010

Pure Bash, без внешних утилит:

saveIFS=$IFS
IFS=:
jararr=($JARS)
echo "${jararr[*]/#/$DIR/}"
IFS=saveIFS

Оригинальный ответ (до изменения вопроса):

IFS=: read -ra jararr <<<"$JARS"
newarr=(${jararr[@]/#/$DIR/})
echo "${newarr[0]}:${newarr[1]}"
0 голосов
/ 21 декабря 2010

Если вы не возражаете против дополнительной точки с запятой в конце:

[~]> for a in `echo $JARS | tr ":" "\n"`;do echo -n $DIR/$a:;done&&echo      
    /opt/app/classes/a.jar:/opt/app/classes/b.jar:/opt/app/classes/c.jar:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...