Добавить префикс / суффикс для всех элементов в строке через пробел - PullRequest
0 голосов
/ 01 февраля 2020

Предположим, у вас есть переменная оболочки foo, значение которой

echo ${foo}
# Output: elementA elementB elementC

Теперь я хотел бы добавить одинаковый префикс __PREFIX__ и суффикс __SUFFIX__ к элементам, чтобы

echo ${new_foo}
# Output: __PREFIX__ElementA__SUFFIX__  __PREFIX__ElementB__SUFFIX__  __PREFIX__ElementC__SUFFIX__ 

Какой самый простой способ добиться этого?


Поскольку я не уверен, как должна вызываться такая операция, заголовок, вероятно, неправильно описывает проблему .

Спасибо за комментарии и ответы. Название обновлено.

Ответы [ 3 ]

4 голосов
/ 01 февраля 2020

Если у вас есть правильный массив,

foo=(a b c)

, вы можете добавить префикс с помощью оператора /# и добавить суффикс с оператором /%. Это должно быть сделано в два шага.

$ foo=(a b c)
$ foo=("${foo[@]/#/__PREFIX__}")
$ foo=("${foo[@]/%/__SUFFIX__}")
$ declare -p foo
declare -a foo=([0]="__PREFIX__a__SUFFIX__" [1]="__PREFIX__b__SUFFIX__" [2]="__PREFIX__c__SUFFIX__")

Если у вас есть строка, разделенная пробелами, вы можете использовать //:

$ foo="a b c"
$ foo="__PREFIX__${foo// /__SUFFIX__ __PREFIX__}__SUFFIX__"
$ echo "$foo"
__PREFIX__a__SUFFIX__ __PREFIX__b__SUFFIX__ __PREFIX__c__SUFFIX__
1 голос
/ 01 февраля 2020

Это простой для понимания подход, но он, вероятно, худший с точки зрения эффективности.

foo="elementA elementB elementC"

PREFIX=__PREFIX__
SUFFIX=__SUFFIX__
for f in ${foo}
do
  new_foo="${new_foo} ${PREFIX}${f}${SUFFIX}"
done
echo ${new_foo}
1 голос
/ 01 февраля 2020

С sed вы можете сделать:

prefix=__PREFIX__
suffix=__SUFFIX__
new=$(sed -E "s/(\S)(\s|$)/\1$suffix  /g;s/(\s|^)(\S)/$prefix\2/g" <<< $foo)

, который выдаст:

__PREFIX__elementA__SUFFIX__ __PREFIX__elementB__SUFFIX__ __PREFIX__elementC__SUFFIX__
...