我有以下代码:
for x in "${array[@]}"
do
echo "$x"
done
结果大致如下(在某些情况下会稍后排序):1
2
3
4
5
有没有办法将其打印为1 2 3 4 5
而不是每次都添加一个新行?我有以下代码:
for x in "${array[@]}"
do
echo "$x"
done
结果大致如下(在某些情况下会稍后排序):1
2
3
4
5
有没有办法将其打印为1 2 3 4 5
而不是每次都添加一个新行?是的。使用-n
选项:
echo -n "$x"
来自 help echo
:
-n 不附加新行符
这也会去掉最后一个换行符,所以如果需要,您可以在循环之后添加最后的换行符:
for ...; do ...; done; echo
注意:
这并不适用于各种不同实现的echo
内置/外部可执行文件。可移植的方法是使用printf
代替:
printf '%s' "$x"
echo
方法放在可移植方法之前有什么原因吗? - Charles Duffyecho
,所以我首先考虑了这个选项。 - heemaylprintf '%s\n' "${array[@]}" | sort | tr '\n' ' '
printf '%s\n'
比 echo
更加健壮,而且这里需要换行符以便于 sort
使用。
"${array[@]}"
对于您的特定数组来说不需要引号,但好的习惯是在那里不使用单词拆分和全局扩展。
您不需要使用 for 循环来对数组中的数字进行排序。
可以像这样使用进程替换:
sort <(printf "%s\n" "${array[@]}")
要去除换行符,请使用以下方法:
sort <(printf "%s\n" "${array[@]}") | tr '\n' ' '
如果出现问题,无论什么原因,-n
不能解决问题,你也可以在要输出的内容末尾添加 \c
:
echo "$x\c"
echo -n
一样不太可移植,而且支持度更少。 - tripleeeprintf
方法。 - tripleeearray=(1 2 3 4 5)
echo "${array[@]}"