到目前为止,我有这个脚本:
#!/bin/sh
echo type in some numbers:
read input
从这里开始,我陷入困境。假设input=30790148
。我想做的是将所有这些整数加起来得到3 + 0 + 7 + 9 + 0 + 1 + 4 + 8 = 32。我该怎么做?
答案 0 :(得分:3)
不使用外部工具的另一种方法:
read -p "Type some number: " num
for((i=0;i<${#num};i++)); do ((sum+=${num:i:1})); done
echo "$sum"
答案 1 :(得分:1)
有两个核心实用程序fold
和paste
,您可以在此处使用(为input=12345
进行说明):
fold -w1 <<< $input | paste -sd+ - | bc
fold -w1
将输入行换成1个字符的宽度:
$ fold -w1 <<< $input
1
2
3
4
5
paste -sd+ -
按顺序(-s
)将输入与+
分隔符(-d+
)合并为一行,即从标准输入中读取(最后一个-
;对于GNU paste
是可选的):
$ fold -w1 <<< $input | paste -sd+ -
1+2+3+4+5
bc
然后计算总和:
$ fold -w1 <<< $input | paste -sd+ - | bc
15
答案 2 :(得分:0)
这个awk单线可能会帮助您:
awk '{for(i=1;i<=NF;i++)s+=$i}END{print s}' FS="" <<< yourString
例如:
kent$ awk '{for(i=1;i<=NF;i++)s+=$i}END{print s}' FS=""<<< "123456789"
45
答案 3 :(得分:0)
此人使用sed
和bc
echo "12345" | sed -e 's/\(.\)/\1\+0/g' | bc
尽管+0
不直观,但还是有点怪癖
编辑:使用@PaulHodges的答案中的&
,它可以简化为:
echo "12345" | sed 's/./&+0/g' | bc
答案 4 :(得分:0)
使用sed
和bc
-
input=30790148; echo $input | sed 's/[0-9]/&+/g; s/$/0/;' | bc
如果您没有GNU sed
,则可能需要换行而不是使用分号。
input=30790148;
echo $input |
sed '
s/[0-9]/&+/g
s/$/0/
' | bc