如何从“日期”的输出中删除前导零或避免对此类十进制数进行八进制解释?

Aqu*_*wer 43 shell bash date arithmetic

我有这个:

date +"%H hours and %M minutes"
Run Code Online (Sandbox Code Playgroud)

我用节日来表达..但它说:“零九小时”..我想让它说“九小时”!

但是 date 总是给我 09 ......所以我想知道 bash 是否可以轻松地使它变成 9 ?

在我试过的复杂脚本中

printf %d 09
Run Code Online (Sandbox Code Playgroud)

但它失败了..不是八进制:(

任何的想法?

Liu*_* 刘研 57

  • 在您的情况下,您可以简单地通过附加禁用零填充 -之后%日期的格式字符串:%-H

    默认情况下,日期用零填充数字字段。以下可选标志可以跟在“%”之后:

    • - (连字符)不要填充字段
    • _ (下划线)用空格填充
    • 0 (零)用零填充
    • ^ 如果可能,请使用大写
    • # 如果可能,使用相反的情况

    日期手册

  • 如果你想在不同的基数中解释数字,在 bash 中

    • 带有前导 0 的常量被解释为八进制数。
    • 前导 0x 或 0X 表示十六进制。
    • 否则,数字采用 [base#]n 的形式,其中 base 是表示算术基数的 2 到 64 之间的十进制数,n 是该基数中的数字

    因此,要将数字解释为十进制,请使用10#n形式,例如。10#09

    echo $((10#09*2))
    18
    
    Run Code Online (Sandbox Code Playgroud)

    请参阅bash 手册的算术评估部分。

  • 谢谢,很详细!顺便说一句,`echo $((011)) $((10#011))` 是另一个输出 `9 11` 的好例子 (2认同)