我已經看到有關同一問題的問題,但它們都是關於字符串的。整數如何,爲什麼我會得到「一元運算符預期」錯誤?在Bash中預計的一元運算符
if [ $(date +%k%M) -ge ${!BLOCK1FRAN} ] ; then whatever ; fi
我已經看到有關同一問題的問題,但它們都是關於字符串的。整數如何,爲什麼我會得到「一元運算符預期」錯誤?在Bash中預計的一元運算符
if [ $(date +%k%M) -ge ${!BLOCK1FRAN} ] ; then whatever ; fi
您正在使用間接尋址。如果變量${BLOCK1FRAN}
指向一個空變量,您將收到錯誤消息。確保${BLOCK1FRAN}
指向的變量包含有效的數值。
如果要將空字符串和非數字值評估爲零0
請使用以下語法。
if [[ $(date +%k%M) -ge ${!BLOCK1FRAN} ]]; then whatever ; fi
+1另一種方法:在bash中聲明名稱,你希望它是數字的,以獲得整數屬性。這給出了一個間接的外觀,但也保證了數值。 '聲明-i x BLOCK1FRAN; BLOCK1FRAN = X; echo $ BLOCK1FRAN' – kojiro
雙支架而不是單打者似乎工作得很好,謝謝。請問爲什麼這是?爲什麼會有人選擇使用[[? – Paolo
'[和]'和'[[和]]'之間的主要區別在於分詞和路徑名擴展不在後者上執行。例如,如果你在'[和]'中有'*',它將被擴展到'$ PWD'中的文件,而'[[和]]'中的'*'不會。而且很可能你打算使用文字'*'。有關更多詳細信息,請參閱'bash'手冊頁。 – alvits
看起來不錯。你確定你已經正確設置了BLOCK1FRAN嗎?
$ whatever() { echo "it works"; }
$ foo=42
$ BLOCK1FRAN=foo
$ if [ $(date +%k%M) -ge ${!BLOCK1FRAN} ] ; then whatever ; fi
it works
您正在使用間接尋址。如果變量'$ {BLOCK1FRAN}'指向一個空變量,你會得到錯誤信息。 – alvits