如何在没有换行的情况下回应事物?

时间:2016-06-24 20:09:49

标签: bash

我有以下代码......

for x  in ${array[@]}
               do
                  echo $x
               done| sort

结果是这样的

1
2
3
4
5

有没有办法将其打印为1 2 3 4 5?没有每次添加换行符?

我也按照其他帖子的建议尝试printf,但它仍在打印新行

for x  in ${array[@]}
               do
                  printf '%s' "$x"
               done| sort

4 个答案:

答案 0 :(得分:25)

是。使用-n选项:

 echo -n $x

来自help echo

-n  do not append a newline

这也会删除最后一个换行符,所以如果你想要,你可以在循环后添加最后一个换行符:

for ...; do ...; done; echo

注意:

这在echo内置/外部可执行文件的各种实现中是不可移植的。可移植的方式是使用printf代替:

printf '%s' "$x"

答案 1 :(得分:4)

您不需要for循环来对数组中的数字进行排序。

使用这样的流程替换:

sort <(printf "%s\n" "${array[@]}")

要删除新行,请使用:

sort <(printf "%s\n" "${array[@]}") | tr '\n' ' '

答案 2 :(得分:3)

printf '%s\n' "${array[@]}" | sort |tr '\n' ' '

printf '%s\n' - 比echo更强大,你想要sort的新线条 "${array[@]}" - 对您的特定数组不需要引用,但这是一种很好的做法,因为您通常不希望在那里进行分词和扩展

答案 3 :(得分:1)

你也可以这样做:

array=(1 2 3 4 5)
echo "${array[@]}"