我有一个场景,我希望在expr中有9个字符数。
我有以下示例代码:
var1=012345678 #this is 9 characters
sum=`expr $var1 + 1`
echo "$sum"
结果如下:
./sample.sh : 12345679 #this is only 8 characters
我的预期输出:
./sample.sh : 012345679
对此有何帮助?
答案 0 :(得分:1)
进行数学运算时,前导零被删除
您可以使用printf "%09d" 123
强制输出9长度。
当您尝试使用语法((sum=${var1} + 1 ))
时,您会遇到另一个问题:当第一个数字为0
时,bash需要不同的基数。
您可以使用
0
var1=012345678
echo "${var1#0}"
这仅对您的输入有帮助,而不是00012
。
删除前导零并打印总和可以使用echo $((10#$var1))
var1=00012345678
((sum=$((10#$var1)) + 1))
printf "%09d\n" $sum
使用
可以更轻松地解决这个问题var1=00012345678
echo "${var1} 1" |awk '{ printf("%09d\n", $1 + $2) }'
您可以使用
来避免使用echo
awk -v var1=$var1 'BEGIN { printf("%09d\n", var1 + 1) }'
BEGIN
用于在没有输入文件的情况下进行解析
选项-v
是一种在awk脚本中使用shell变量的简洁方法
不要试着带引号的东西,有一天它会射击你自己的脚:
# Don't do this
awk 'BEGIN { printf("%09d\n", '${var1}' + 1) }' # Just do not do it