shell脚本中的SPRINTF?
我每天都有一个自动生成的文件,由 shell 脚本调用。 但是,我面临的问题是自动生成的文件具有以下形式:
FILE_MM_DD.dat
... 其中 MM 和 DD 是 2 位数的月份和日期字符串。
我做了一些研究并自己进行了研究,但我不知道如何仅使用 shell 脚本创建这些自定义字符串。
需要明确的是,我知道 Bash 中的 DATE 函数,但我正在寻找与 C 中的 SPRINTF 函数等效的函数。
I have an auto-generated file each day that gets called by a shell script.
But, the problem I'm facing is that the auto-generated file has a form of:
FILE_MM_DD.dat
... where MM and DD are 2-digit month and day-of-the-month strings.
I did some research and banged it at on my own, but I don't know how to create these custom strings using only shell scripting.
To be clear, I am aware of the DATE function in Bash, but what I'm looking for is the equivalent of the SPRINTF function in C.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在 Bash 中:
或者,等效的,更接近于
sprintf
:如果变量包含带前导零的十进制值,则可以删除前导零:
或
$((10#$val1) )
将值强制转换为基数 10,因此格式规范中的%d
不会认为“08”是无效的八进制值。如果您使用
date
(至少对于 GNUdate
),您可以省略前导零,如下所示:为了完整起见,如果您想要添加 em> 前导零,填充到一定宽度:
或使用动态宽度:
添加前导零对于创建易于排序并在列中整齐对齐的值很有用。
In Bash:
or, the equivalent, and closer to
sprintf
:If your variables contain decimal values with leading zeros, you can remove the leading zeros:
or
The
$((10#$val1))
coerces the value into base 10 so the%d
in the format specification doesn't think that "08" is an invalid octal value.If you're using
date
(at least for GNUdate
), you can omit the leading zeros like this:For completeness, if you want to add leading zeros, padded to a certain width:
or with dynamic widths:
Adding leading zeros is useful for creating values that sort easily and align neatly in columns.
为什么不使用 coreutils 中的 printf 程序?
Why not using the printf program from coreutils?
尝试:
示例:
Try:
Example: