首页 > 解决方案 > 如何让 printf 以不同的方式处理从 bc 脚本传递的变量?

问题描述

我正在为 CodeWars 编写一个程序,该程序要求我返回 2 个特定变量,它们之间有一个空格。

以下是我要执行的脚本

!/bin/bash

nbMonths()
{
    printf "%.0f\n" $(
    bc <<< "
      scale=5
      osum=$1
      nsum=$2
      sav=0
      lper=($4 / 100)
      cmon=0

      diff = osum + sav - nsum

      while( diff < 0 ) {
         osum -= ( osum * lper )
         nsum -= ( nsum * lper )
         sav += $3
         cmon += 1
      
         scale=0
         if( (cmon%2) == 1) {
           scale=5
           lper += 0.005
         }
    
         scale=5
         diff = osum + sav - nsum
      } 

      print cmon, diff
    ")
}

nbMonths $1 $2 $3 $4

对于 bash 脚本的以下输入

bash 名称OfProg.sh 2000 8000 1000 1.5

它显示的结果是

6766

虽然我希望它显示为

6 766

我对此有两个问题,

  1. 有没有办法让 printf 以上述格式打印?

  2. 我注意到这print cmon, \", \", diff会导致

    6, 766

    是否有\",\"我可以使用的转义序列(如 )?如果是这样,我在哪里可以找到它,因为没有print.

请注意,我%0.fprintf语句中使用的原因是我需要对最后一个值(来自差异)进行四舍五入。

标签: bashbc

解决方案


您可以bc print通过在双字符串中引用空格来打印命令中的空格。

由于您的bc输入已被引用,因此您需要使用反斜杠转义引号,这样它就不会结束 here-string(后面的数据<<<)。

这是一个简单的例子:

$  bc <<<"print 1, \" \", 3, \" \", 4"; echo
1 3 4

推荐阅读