我想在一条线上显示多个回声。我的问题是。-不行。
我的代码是:

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

我怎么能把所有的回声都集中在一条线上?或者我怎样才能解决不同的问题呢?
有什么建议吗?

最佳答案

这里的直接问题是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"

10-08 11:26