bash:如何在字符串中添加空格?

时间:2016-05-21 20:49:00

标签: string bash spaces

我有一个这样的字符串:

string="aaa-bbb"

但是我想在char' - '之前添加空格,所以我想要这个:

aaa -bbb

我尝试了很多东西,但我无法在那里添加空间。我尝试了echo $string | tr '-' ' -'和其他一些东西,但它没有用......

我有Linux Mint:GNU bash,版本4.3.8(1)

5 个答案:

答案 0 :(得分:5)

无需致电sed,在BASH使用string substitution本地语:

$ foo="abc-def-ghi"
$ echo "${foo//-/ -}"
abc -def -ghi

请注意变量名后面的两个斜杠:第一个斜杠替换第一个匹配项,其中两个斜杠替换每个匹配项。

答案 1 :(得分:1)

尝试一下:

printf "%s\n" "${string}" | sed 's/-/ -/g'

它会查找-并将其替换为-(空格连字符)

答案 2 :(得分:1)

tr一次只能替换一个字符。您正在寻找的是sed

echo "$string" | sed 's/-/ -/'

答案 3 :(得分:1)

Bash内置字符串替换。

result="${string/-/ -}"
echo "$result"

或者,您可以使用sed

result=$(echo "$string" | sed 's/-/ -/')
echo "$result"

答案 4 :(得分:1)

您要求shell回显未引用的变量$string 发生这种情况时,变量内的空格用于分割字符串:

$ string="a -b -c"
$ printf '<%s>\n' $string
<a>
<-b>
<-c>

变量确实包含空格,只是你没有正确看到它。 Quote your expansions

$ printf '<%s>\n' "$string"
<a -b -c>

要将变量从-更改为-,有许多解决方案:

sed:string="$(echo "$string" | sed 's/-/ -/g')"; echo "$string"
bash:string="${string//-/ -}; echo "$string"