将 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}
假设您有一个 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}