這是腳本:
#!/bin/bash
thedate=$(date)
var='Current date is $thedate'
echo $var
輸出是當前日期是 $thedate,我想讓它顯示日期,我做錯了什麼?任何幫助,將不勝感激。
答案1
問題是bash
僅擴展環境變數一次,除非您使用eval
,這會導致命令列被解析兩次:
eval echo $var
請注意,顯示的日期和時間是thedate
設定時的當前日期和時間,而不是$var
引用時的日期和時間。要顯示$var
引用的當前時間,您需要:-
var='Current date is $(date)'
eval echo $var
最好不要使用變量,而是定義一個函數:-
cdate() { echo Current date is $(date); }
...
cdate
當然,最好還是不要使用echo
,而是讓它date
自己添加額外的文字:
cdate() { date +"Current date is %c"; }
這不會輸出與date
預設格式完全相同的格式,但預設值沒有格式說明符。
答案2
var='Current date is $thedate'
變數不會在單引號內擴展,因此分配一個包含文字 text 的字串$thedate
。您應該在此處使用雙引號來擴展變數。
echo $var
另外,在這裡,您應該在變數周圍使用雙引號,以防止它受到分詞和路徑名擴展的影響,即echo "$var"
.在這種特殊情況下,您基本上可以不使用引號,因為日期可能不包含萬用字元。但如果沒有引號,例如日期字串Fri Dec 7 20:41:21 EET 2018
將輸出為Fri Dec 7 20:41:21 EET 2018
,即月份名稱後面的雙空格將折疊為一個空格。
答案3
使用雙引號代替單引號。 Bash 在單引號中不會擴展變數。