Bash 指令替換不起作用

Bash 指令替換不起作用

這是腳本:

#!/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 在單引號中不會擴展變數。

相關內容