2017-07-18 62 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