【问题标题】:Remove line breaks in Bourne Shell from variable从变量中删除 Bourne Shell 中的换行符
【发布时间】:2011-01-07 08:44:21
【问题描述】:

在 bourne shell 中,我有以下内容:

VALUES=`some command that returns multiple line values`

echo $VALUES

看起来像:

"ONE"
"TWO"
"THREE"
"FOUR"

我希望它看起来像:

"ONE" "TWO" "THREE" "FOUR"

谁能帮忙?

【问题讨论】:

  • 你想要一个由 4 个字符串组成的数组,还是想要一个字符串 "ONE TWO THREE FOUR"?
  • nit:反引号中的命令(为什么不使用 $() 代替?)不会“返回”多个值。它输出多行,并返回一个值,希望为零。
  • 威廉,非常简化的版本。我实际上是取反引号的输出,对 VALUES 中的数据做一些解析工作,而不是稍后输出 VALUES。

标签: shell scripting newline line-breaks sh


【解决方案1】:

接受的解决方案对我不起作用(在 OS X Yosemite 上)。这是我用的:

echo -n $VALUES

【讨论】:

    【解决方案2】:

    另一种方法,如果您不仅要打印代码,还要将其分配给变量,并且末尾没有虚假空格:

    $ var=$(tail -1 /etc/passwd; tail -1 /etc/passwd)
    $ echo "$var"
    apache:x:48:48:Apache:/var/www:/sbin/nologin
    apache:x:48:48:Apache:/var/www:/sbin/nologin
    $ var=$(echo $var)
    $ echo "$var"     
    apache:x:48:48:Apache:/var/www:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin
    

    【讨论】:

      【解决方案3】:

      另一种选择是使用xargs(尽管它保留了最后一个换行符 - 而不是使用tr 的可能的尾随空格):

      echo $VALUES | xargs
      printf '%s\n' 1 2 3 4 5 | xargs
      

      @yozloy:如何使用<<<传递转义字符串

      tr -d '\n' <<< "`printf '%b' 'a line with line feed \n'`"
      

      【讨论】:

        【解决方案4】:

        echo $VALUES | tr '\n' ' '

        【讨论】:

        • 不错。只是一个调整:在 bash 和 zsh 中,至少你可以在没有 echo 的情况下使用
        • @liwp +1 为好小费。顺便说一句,如何使用&lt;&lt;&lt;tr -d '\n' &lt;&lt;&lt; "a line with line feed \n" 传递转义字符串。字符串没有像我预期的那样在双引号中转义 '\n',知道吗?
        • 如果你不想要空格你可以做echo $VALUES | tr -d '\n',结果将是ONETWOTHREEFOUR
        猜你喜欢
        • 2013-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多