Bash post增加表达式内部

时间:2014-06-16 23:41:03

标签: bash

考虑以下脚本。

i=1
echo $(printf "%02d" $i)
((i++))
echo $(printf "%02d" $i)

输出结果为:

01
02

我想删除中间((i++))行中的行,并且具有类似以下内容的行,但它只打印01两次。

i=1
echo $(printf "%02d" $((i++)))
echo $(printf "%02d" $i)

如何获得01后跟02的相同输出而没有单独的语句来进行增量?

我已经查看了this question,其中的解决方案不适用于此用例。

更新:我在子shell中运行,因为真正的问题是进行变量赋值:

x=$(printf "%02d" $((i++)))

我最初将其更改为echo以简化示例。

1 个答案:

答案 0 :(得分:1)

通过使用bash builtin printf,可以在不使用子shell的情况下分配变量的值。

在您的情况下,您希望在执行第一个语句时递增i,然后在第二个语句中使用相同的变量。

以下是使用bash builtin printf的方法。

i=1
printf -v x "%02d" $((i++))
printf -v y "%02d" $i

您最终会得到x=01y=02