如何在没有-ne的情况下在同一行显示多个回声?

时间:2016-12-13 21:02:41

标签: linux shell echo

我想在一行上显示多个Echos。我的问题是。 -ne不会工作。 我的代码现在是:

echo -ne "Not enough Space! Please free " >&2
echo "scale=2; $((reqSpace - availSpace)) /1024^2" | bc
echo " more GB"

输出是:

Not enough Space available! Please free 5
 more GB

当我在第二个通道中放入-ne时,我的输出是:

Not enough Space! Please free (standard_in) 1: syntax error
 more GB

如何将所有这些回声放在一条线上?或者我怎样才能解决它? 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

你在这里遇到的直接问题是bc总是将输出作为UNIX文本流发出 - 这意味着最后总是使用换行符分隔符。

使用命令替换来捕获bc的输出隐式地删除尾随换行符,从而解决此问题。

您的命令替换可以直接替换为echo命令:

echo "Not enough Space! Please free $(bc <<<"scale=2; $((reqSpace - availSpace)) /1024^2") more GB" >&2

您也可以考虑使用printf代替:

printf 'Not enough space! Please free %s more GB\n' \
  "$(bc <<<"scale=2; $((reqSpace - availSpace)) /1024^2")" >&2

那就是说,你可以bc的输出中删除该换行符,就像tr所做的那样:

printf "Not enough Space! Please free " >&2
echo "scale=2; $((reqSpace - availSpace)) /1024^2" | bc | tr -d '\n' >&2
echo " more GB"