我有以下代码......
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
答案 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[@]}"