将 prefix/suffix 添加到 space-separated 字符串中的所有元素

Add prefix/suffix to all elements in space-separated string

假设您有一个 shell 变量 foo,其值为

echo ${foo}
# Output: elementA elementB elementC

现在我想为元素添加相同的前缀 __PREFIX__ 和后缀 __SUFFIX__,这样

echo ${new_foo}
# Output: __PREFIX__ElementA__SUFFIX__  __PREFIX__ElementB__SUFFIX__  __PREFIX__ElementC__SUFFIX__ 

实现该目标的最简单方法是什么?


因为我不确定应该如何调用这样的操作,所以标题可能没有正确描述问题。

感谢您的评论和回答。标题已更新。

如果你有一个合适的数组,

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__")

如果你只有一个 space 分隔的字符串,你可以使用 //:

$ foo="a b c"
$ foo="__PREFIX__${foo// /__SUFFIX__ __PREFIX__}__SUFFIX__"
$ echo "$foo"
__PREFIX__a__SUFFIX__ __PREFIX__b__SUFFIX__ __PREFIX__c__SUFFIX__

使用 sed 你可以做:

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

输出:

__PREFIX__elementA__SUFFIX__ __PREFIX__elementB__SUFFIX__ __PREFIX__elementC__SUFFIX__

这是一种易于阅读的方法,但从效率的角度来看,它可能是最差的。

foo="elementA elementB elementC"

PREFIX=__PREFIX__
SUFFIX=__SUFFIX__
for f in ${foo}
do
  new_foo="${new_foo} ${PREFIX}${f}${SUFFIX}"
done
echo ${new_foo}