在EXPR命令中定义特定输出计数

时间:2017-08-17 19:00:11

标签: unix

我有一个场景,我希望在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

对此有何帮助?

1 个答案:

答案 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