2014-04-01 35 views
3

我已經看到有關同一問題的問題,但它們都是關於字符串的。整數如何,爲什麼我會得到「一元運算符預期」錯誤?在Bash中預計的一元運算符

if [ $(date +%k%M) -ge ${!BLOCK1FRAN} ] ; then whatever ; fi 
+3

您正在使用間接尋址。如果變量'$ {BLOCK1FRAN}'指向一個空變量,你會得到錯誤信息。 – alvits

回答

5

您正在使用間接尋址。如果變量${BLOCK1FRAN}指向一個空變量,您將收到錯誤消息。確保${BLOCK1FRAN}指向的變量包含有效的數值。

如果要將空字符串和非數字值評估爲零0請使用以下語法。

if [[ $(date +%k%M) -ge ${!BLOCK1FRAN} ]]; then whatever ; fi 
+2

+1另一種方法:在bash中聲明名稱,你希望它是數字的,以獲得整數屬性。這給出了一個間接的外觀,但也保證了數值。 '聲明-i x BLOCK1FRAN; BLOCK1FRAN = X; echo $ BLOCK1FRAN' – kojiro

+0

雙支架而不是單打者似乎工作得很好,謝謝。請問爲什麼這是?爲什麼會有人選擇使用[[? – Paolo

+0

'[和]'和'[[和]]'之間的主要區別在於分詞和路徑名擴展不在後者上執行。例如,如果你在'[和]'中有'*',它將被擴展到'$ PWD'中的文件,而'[[和]]'中的'*'不會。而且很可能你打算使用文字'*'。有關更多詳細信息,請參閱'bash'手冊頁。 – alvits

-1

看起來不錯。你確定你已經正確設置了BLOCK1FRAN嗎?

$ whatever() { echo "it works"; } 
$ foo=42 
$ BLOCK1FRAN=foo 
$ if [ $(date +%k%M) -ge ${!BLOCK1FRAN} ] ; then whatever ; fi 
it works