Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 在EXPR命令中定义特定的输出计数_Unix - Fatal编程技术网

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

Unix 在EXPR命令中定义特定的输出计数,unix,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 这方面有什么帮助吗?在进行数学运算时,前导零将被删除。 您可以使用print

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

这方面有什么帮助吗?

在进行数学运算时,前导零将被删除。
您可以使用
printf“%09d”123
强制9长度输出。 当您尝试使用语法
((sum=${var1}+1))
时,您会遇到另一个问题:当第一个数字是
0
时,bash需要一个不同的基数。
您可以使用删除第一个
0

var1=012345678
echo "${var1#0}"
awk -v var1=$var1 'BEGIN { printf("%09d\n", var1 + 1) }'
这仅对您的输入有帮助,而对
00012
没有帮助。 可以使用
echo$((10#$var1))

这可以通过以下方法更容易地解决:

var1=00012345678
echo "${var1} 1" |awk '{ printf("%09d\n", $1 + $2) }'
您可以使用

var1=012345678
echo "${var1#0}"
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

您能解释一下“%09d”部分在awk中的含义吗?
%d
=参数为整数
09
=最小长度9,如果长度需要,则用前导零填充。有关详细信息,请搜索
printf格式。