【问题标题】:bash: How to add space in string?bash:如何在字符串中添加空格?
【发布时间】:2016-09-18 23:13:17
【问题描述】:

我有一个这样的字符串:

string="aaa-bbb"

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

aaa -bbb

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

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

【问题讨论】:

    标签: string bash spaces


    【解决方案1】:

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

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

    注意变量名后面的两个斜杠:第一个斜杠替换第一个出现的位置,其中两个斜杠替换每个出现的位置。

    【讨论】:

      【解决方案2】:

      试试这个:

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

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

      【讨论】:

        【解决方案3】:

        您要求 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"
        重击:string="${string//-/ -}; echo "$string"

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

            Bash 具有内置的字符串替换功能。

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

            您也可以使用sed:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-06-20
              • 1970-01-01
              • 1970-01-01
              • 2016-05-31
              相关资源
              最近更新 更多