Shell中的空格字符串转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell中的空格字符串转换相关的知识,希望对你有一定的参考价值。

考虑您有一个shell变量foo,其值为

echo $foo
# Output: elementA elementB elementC

现在,我想向元素添加相同的前缀__PREFIX__和后缀__SUFFIX__,以便

echo $new_foo
# Output: __PREFIX__ElementA__SUFFIX__  __PREFIX__ElementB__SUFFIX__  __PREFIX__ElementC__SUFFIX__ 

最简单的方法是什么?


由于我不确定如何调用此类操作,因此标题可能无法正确描述问题。建议非常欢迎!

答案
如果您有

proper数组,

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__

另一答案
使用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__

另一答案
这是一种易于阅读的方法,但是从效率的角度来看,这可能是最糟糕的方法。

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中的空格字符串转换的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串中的全角空格转换成半角空格?

如何将字符串输入(带空格的数字)转换为Shiny(R)中的数据帧?

空格转换

python实现字符串中的半全角转换

Getopt :: Long将包含空格的字符串转换为变量

java中 怎么将String字符串 中的 转义字符(回车、换行、空格等)在未知的情况下,转换为字符串形式输出