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

bash: How to add space in string?

我有这样的字符串:

string="aaa-bbb"

但是我想在字符'-'之前添加space,所以我想要这个:

aaa -bbb

我尝试了很多东西,但我不能在那里添加 space。我试过 echo $string | tr '-' ' -' 和其他一些东西,但没有用...

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

试试这个:

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

它查找 - 并将其替换为 -(space 连字符)

tr一次只能替换一个字符。你要找的是 sed:

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

无需调用sed,在BASH中使用string substitution原生:

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

注意变量名后的两个斜杠:第一个斜杠替换第一个出现的地方,两个斜杠替换每个出现的地方。

Bash 具有内置字符串替换。

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

或者您可以使用 sed:

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

您要求 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"