我试图添加" $"在下面计算的数字前面;唯一一个能够添加" $"是限制,因为它与总数等没有任何数学冲突。我如何在成本,提示,总计,平均值中添加美元符号。我尝试添加它像我做的限制,但它给了我一个语法错误。请帮我解决这个问题!
Percent=20
function calc {
echo -n "What is the total cost in cents?";
read cents
guests=5
Limit='$'$(awk "BEGIN{printf \"%.2f\n\", guests * 10 "); #added successfully
Cost=$(echo "scale =2; $cents/100" | bc); #need to add $
Percent=$(echo "scale =2; $Percent / 100" | bc);
Tip=$(echo "scale =2; $Cost * $Percent" | bc); #need to add $
Total=$(echo "scale =2; $Cost + $Tip" | bc); #need to add $
Average=$(echo "scale =2; $Total/guests" | bc); #need to add $
}
我有一个类似的代码已发布,但它并不相同,因为之前的代码并不能帮助我解决" $"我现在有的问题
答案 0 :(得分:2)
在仍使用变量计算某些内容时,无法将$
添加到变量中。它适用于Limit
因为Limit
未在以下计算中使用。 “手动”执行程序,看看会发生什么:
会发生什么:
Cost='$12.00' # value computed by hand
Tip='$1.00' # value computed by hand
Total=$(echo 'scale=2; $12.00 + $1.00' | bc); # filled in values of variables
bc
不知道如何处理$
。在没有$
的情况下完成所有计算,然后(在最后)添加$
。
# ongoing calculations
Cost='$'"$Cost"
Tip='$'"$Tip"
Total='$'"$Total"
Average='$'"$Average"
答案 1 :(得分:1)
简单的答案是,您可以通过引用或转义需要保护的部分来粘贴字符串,在这种情况下是$
字符,否则它是shell元字符。
Average=\$$(echo "scale =2; $Total/guests" | bc) # or
Average='$'$(echo "scale =2; $Total/guests" | bc) # or
Average="$"$(echo "scale =2; $Total/guests" | bc)
你的实际问题似乎是你在Awk中使用guests
就好像它是一个Awk变量,但是awk并不知道shell有一个带有这个名字的变量。
更重要的是,在子shell中运行大量echo
命令是反模式。您已经在使用Awk - 重构它,因此它可以一次性生成您需要的所有结果。也许是这样的:
Percent=20
calc () { # notice also the switch to POSIX function definition syntax
read -p "What is the total cost in cents?" cents
# Can't use shell variable in Awk script!
set -- $(awk -v guests=5 -v cents="$cents" -v percent="$Percent" '
BEGIN{cost=cents/100; tip=cost*percent; total=cost+tip; average=total/guests;
printf "%.2f $%.2f %.2f $%.2f $%.2f $%.2f\n", guests * 10,
cost, percent/100, tip, total, average}')
Limit=$1
Cost=$2
Percent=$3
Tip=$4
Total=$5
Average=$6
}
set -- some tokens
的功能是将$1
设置为some
,将$2
设置为tokens
等,即快速简洁(但可以说是模糊不清)将命令行参数设置为您选择的一组值的方法。
您会注意到我将美元符号计入printf
格式字符串。
更基本的是,让一个函数创建大量的变量以便在shell脚本的其他地方使用,这也是一种含糊但却截然不同的难闻气味。你确定这个脚本真的想成为一个shell脚本吗?你真的确定这个特殊的设计是可维护的吗?