bash - 如何让 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
我对此有两个问题,
有没有办法让 printf 以上述格式打印?
我注意到这
print cmon, \", \", diff
会导致6, 766
是否有
\",\"
我可以使用的转义序列(如 )?如果是这样,我在哪里可以找到它,因为没有print
.
请注意,我%0.f
在printf
语句中使用的原因是我需要对最后一个值(来自差异)进行四舍五入。
解决方案
您可以bc
print
通过在双字符串中引用空格来打印命令中的空格。
由于您的bc
输入已被引用,因此您需要使用反斜杠转义引号,这样它就不会结束 here-string(后面的数据<<<
)。
这是一个简单的例子:
$ bc <<<"print 1, \" \", 3, \" \", 4"; echo
1 3 4
推荐阅读
- hyperledger-fabric - Hyperledger Fabric 通道创建失败:主体反序列化失败
- google-cloud-platform - (gcloud.projects.list) PERMISSION_DENIED
- r - 使用 plm 包管理时间效应
- mysql - 如何使用 MySQL 从另一个表 (B) 中填充一个表 (A) 上的缺失行?
- c++ - CFAbsoluteTime 获取时间组件
- python - 如何使用 Python 比较来自同一个 dict 键的嵌套字典值
- r - 在 R 中的另一个图中单击更改一个图的限制
- python - Youtube Data API 不断请求授权
- javascript - 将 RXJS 可观察结果合二为一
- python - 获取熊猫系列中的前 K 值包括重复值