我想在一条线上显示多个回声。我的问题是。-不行。
我的代码是:
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"