2017-07-18 61 views
1

不当工作,所以我发现了艰辛的道路是$(date +%H)从凌晨1点返回基地8号上午9点。没有什么大不了的,我强迫它成为一个基数为10的数字:$((10#$(date +%H))) ......这是我的问题,写的完全是抛出一个错误“-bash:9:command not found”,但如果我说echo $((10#$(date +%H)))它会返回我正确的数字。任何线索为什么发生这种情况?你将如何去修复它?谢谢强制基地10在BASH

回答

3

如果您的date变化是相当新的,有一个格式修饰符,可以为每man页面更改或禁用填充:


默认情况下,date垫用零数字字段。以下可选的标志可以遵循%

  • -(连字符)不要垫场。
  • _(下划线)填充空格。
  • 0(零)垫用零。

因此,第一件事我会尝试将date -%-H。这应该给你没有任何填充的小时。

((hr = 1$(date +%H) - 100)) 

1$(date +%H)会给你一个:

上关的机会,你有一个古老的date变种,你可以像得到一个实际(取决于时间单或双位数)值在100123(含)之间,然后减去100以给出数字小时。

例如,在上午04点23分,这将采取04date +%H,把它转换成104然后减去100获得数4。比9更大

号码也可以工作。时间16:42将采取16date +%H,把它转换成116然后减去100获得数16


至于为何您会得到一个错误,命令$((10#$(date +%H)))将评估为9(假设时间为09:xx),然后就尝试执行(其中,除非你在你有一个可执行9某处路径,会出错)。

echo作为前缀将导致命令echo 9运行,其中有效。

正如你所看到的,你不需要呼应它,你可以将其存储在一个变量(如hr以上),以备后用。

+0

你能解释脚本内实际发生了什么吗? – ConfuzzledandPuzzled

+0

@ConfuzzledandPuzzled,希望这个更新可以让你不再感到困惑和/或困惑:-) – paxdiablo

+0

非常感谢,但是你知道为什么在我的问题中排除脚本中的echo会引发错误,而添加它会让它正常运行吗? – ConfuzzledandPuzzled