考虑以下脚本。
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
以简化示例。
答案 0 :(得分:1)
通过使用bash builtin printf,可以在不使用子shell的情况下分配变量的值。
在您的情况下,您希望在执行第一个语句时递增i
,然后在第二个语句中使用相同的变量。
以下是使用bash builtin printf的方法。
i=1
printf -v x "%02d" $((i++))
printf -v y "%02d" $i
您最终会得到x=01
和y=02
。