2014-12-02 94 views
0

我有使用echo打印兩個變量的問題。下面是從腳本代碼片段: -使用echo打印變量時出現問題

tdaydatefile=$(date +'%m%d%Y') 
ip=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}') 
echo "Dumping all network connections to $HOME/MyLog/netstat_$ip_$tdaydatefile.csv!" 

當腳本運行時,它只能打印如下: -

Dumping all network connections to /root/MyLog/netstat_12022014.csv! 

它不打印的IP地址(IP變量)系統。如果我用echo中的tdaydatefile替換ip,它會打印ip並忽略tdaydatefile變量。

任何想法這裏可能是錯誤的?

+0

'ip_'是一個有效的變量名稱,您正在轉儲一個未定義的變量。嘗試'{$ ip}',或者改爲使用破折號'' - $ ip- $ tday'代替。 – 2014-12-02 16:23:30

+0

你應該用你正在使用的語言來標記它。 – Scimonster 2014-12-02 16:25:13

+2

@MarcB:我想你的意思是'netstat _ $ {ip} _ $ tdaydatefile',其中的大括號位於$和變量名之後。 – 2014-12-02 16:52:31

回答

2

由於_是一個有效的變量名字符,您需要告訴shell您的變量名稱的結尾。 (在你的代碼中,shell解釋ip_作爲變量名。)

這可以通過在{...}封閉變量名來完成,即,在這種情況下使用${ip}

echo "Dumping all network connections to $HOME/MyLog/netstat_${ip}_$tdaydatefile.csv!" 

請注意,這不是必需$HOME$tdaydatefile,因爲/.不是有效的變量名字符。

但是,如果有疑問,使用${...} —它也有助於可讀性。

+0

辦公室的本地編碼慣例是「所有變量名稱引用總是包含在'$ {name}'」中。我並不完全熱衷於此,但它是系統化的,可以自動修復。 – 2014-12-02 17:00:24

+0

@JonathanLeffler:就我個人而言,我只在技術上必要的時候做這件事,爲了擴展字符串的可讀性,我只做它,因爲花括號很難打字。重新編輯:儘管在這樣一個簡短的回答中可能不需要,但我發現粗體的關鍵段落可用於快速引起對帖子*要點的注意;這也是我在創建個人用途筆記時使用的技巧。 – mklement0 2014-12-02 17:11:11

+0

風格很複雜。在我自己的代碼中,我主要使用'$ variable'而不是'$ {variable}',但是在工作中規則中有一些智慧。答案格式風格同樣複雜,但將大膽保持在最低限度通常是一個好主意 - 但也非常主觀。 – 2014-12-02 17:58:30