【问题标题】:Concatenating two string variables in bash appending newline在附加换行符的bash中连接两个字符串变量
【发布时间】:2013-08-30 14:54:52
【问题描述】:

我有一个变量final_list,在循环中附加了一个变量url

while read url; do
    final_list="$final_list"$'\n'"$url"
done < file.txt

令我惊讶的是,\n 被附加为一个空格,所以结果是:

url1 url2 url3

当我想要的时候:

url1
url2
url3

怎么了?

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:

    变量"$final_list" 中有很多新行。 echo 像这样双引号

    echo "$final_list"
    url1
    url2
    url3
    

    或者更好地使用printf

    printf "%s\n" "$final_list"
    url1
    url2
    url3
    

    【讨论】:

    • 谢谢。你能解释一下发生了什么吗?
    • 引用在 Unix shell 中是最重要的。没有引号的 shell 不应用任何扩展规则并将新行视为空格。
    • 如果没有引号,$final_list 扩展中的任何空格(包括换行符)都被视为单词分隔符,而不是要打印的文字字符。 echo 仅接收 3 个参数,即实际 URL。使用引号,echo 接收一个参数,即包含 url 的字符串和分隔它们的换行符。
    【解决方案2】:

    这可能取决于您尝试显示最终结果的方式。尝试在双引号内输出结果变量:

    echo "$final_list"
    

    【讨论】:

      【解决方案3】:

      如果有人愿意尝试,可以再添加一个选项。

      带字符串值:

      命令:echo "This is the string I want to print in next line" | tr " " "\n"

      输出:

      This
      is
      the
      string
      I
      want
      to
      print
      in
      next
      line
      

      使用变量:

      finallist="url1 url2 url3"          
      url="url4 url5"                     
      echo "$finallist $url" | tr " " "\n"
      

      输出:

      url1
      url2
      url3
      url4
      url5
      

      如果您希望一行中的单词少而下一行中的单词少,请尝试使用不同的分隔符。 (如 - 或 : 或 ; 或等...)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-13
        • 1970-01-01
        • 2014-02-04
        • 1970-01-01
        • 2011-05-10
        • 2018-12-07
        相关资源
        最近更新 更多