變量,這是我的腳本,我在UNIX上運行(AIX):提取兩個在UNIX
$MON date +"%m"
echo 'expr $MON - 2'
輸出:
04
expr $MON - 2
我只是想從我目前的一個月,顯示扣2 。
感謝adavance
變量,這是我的腳本,我在UNIX上運行(AIX):提取兩個在UNIX
$MON date +"%m"
echo 'expr $MON - 2'
輸出:
04
expr $MON - 2
我只是想從我目前的一個月,顯示扣2 。
感謝adavance
試試這個:
MON=$(date +"%m")
echo $(($MON-2))
你並不需要使用expr
因爲Bash可以進行簡單的算術也。
如果你的shell不支持算術表達式,使用expr
:
expr $MON - 2
在這兩種情況下,你會得到2
作爲輸出。
- 2「)語法錯誤:算術運算符無效(錯誤標記爲」 「作爲輸出,這就是輸出 – 2013-04-26 10:55:50
您沒有正確分配MON,使用'MON = $(date +」%m「)''在我的答案。 – dogbane 2013-04-26 10:57:49
我複製粘貼相同的東西,仍然錯誤仍然存在。 – 2013-04-26 11:02:00
我認識到,在AIX
默認的shell是ksh
一些變體,它不從同樣的缺陷作爲輸入基地bash
吃虧,但它是值得銘記如果你最終在其他平臺上遇到此。
如果這是您輸入:
$MON date +"%m"
echo 'expr $MON - 2'
那麼你有幾個問題。
$MON
沒有設置,從而導致線date +"%m"
,這使輸出04
expr $MON - 2
首先,指定你做VARIABLE=value
變量,你的情況,這應該是:
MON=`date +"%m"`
請勿在=
標誌之前或之後放置空格。
其次,執行EXPR,您需要使用反引號(`
)
echo `expr $MON - 2`
然而,對於大多數貝殼,你應該使用的更現代的版本,我想要得到的結果命令,這是邏輯$(command)
。這些可以嵌入,這使得它們更容易理解(反引號需要轉義,並且越多反轉就越需要轉義,這很快導致反斜槓)。 對於bash,您需要確保月份被解釋爲基數爲10的數字,否則一旦您打到8月份,代碼將停止工作:
要強制數字被解釋爲基數爲10的數字,與10#
:
MON=10#$(date +"%m")
echo $(($MON-2))
例子:
bash-3.2$ month=07
bash-3.2$ echo $(($month + 1))
8
bash-3.2$ month=08
bash-3.2$ echo $(($month + 1))
bash: 08: value too great for base (error token is "08")
bash-3.2$ month=10#08
bash-3.2$ echo $(($month + 1))
9
另一種選擇:如果你想看到11或12一月或二月,讓GNU date
做算術:
date -d "-2 months" +%m
那麼萬一月份是0或1,你想表現什麼? – abasu 2013-04-26 13:12:45