2012-01-09 48 views
0

我有這個問題,我無法得到我的頭。反向語句中的變量

FILE_PROPERTIES="info.txt" 

echo `grep "ENVOI_MAIL=" ${FILE_PROPERTIES} | cut -d "=" -f "2"` 

我在第二行FILE_PROPERTIES不會改變像我希望它,並在文件完成沒找到例外。 有人會知道這是爲什麼嗎?

或者,以更一般的方式,我們將如何去調用``語句中的變量,以便將其轉換爲輸出?我嘗試過沒有{},沒有任何運氣。

+0

什麼環境中,這是什麼? 「批處理」標記用於Windows批處理文件,但這看起來不像Windows批處理語法。 – 2012-01-09 18:38:46

+0

@CheranShunmugavel謝謝!錯了,我更新了標籤。 – y2k 2012-01-09 19:51:40

+1

適用於此(bash 4.1.10)。可能依賴於shell的類型和可能的版本。 'export FILE_PROPERTIES =「info.txt」'工作嗎? – 2012-01-09 20:23:26

回答

1

你這樣做的方式應該有效。例如,以下應該(試圖)訪問info.txtsomething_else.txt。請注意,兩個echo命令是相同的。

#!/bin/sh 

FILE_PROPERTIES="info.txt" 
echo `grep "ENVOI_MAIL=" ${FILE_PROPERTIES} | cut -d "=" -f "2"` 

FILE_PROPERTIES="something_else.txt" 
echo `grep "ENVOI_MAIL=" ${FILE_PROPERTIES} | cut -d "=" -f "2"` 

一個可能的問題是,如果文件名包含空格,它會出現在grep命令兩個參數。你可以通過使用引號來避免這種情況(反正也不是一個壞主意)。 (大括號不在這種情況下要求,但也有不壞的主意。)

echo `grep "ENVOI_MAIL=" "${FILE_PROPERTIES}" | cut -d "=" -f "2"` 

而且,最現代的炮彈支持$(...)語法比反引號形式更好一點(的一兩件事,它可以被嵌套):

echo $(grep "ENVOI_MAIL=" "${FILE_PROPERTIES}" | cut -d "=" -f "2") 

最後,echo可能是沒有必要,除非你確實需要echo的治療的空白。你可能會改爲試試這個:

grep "ENVOI_MAIL=" "${FILE_PROPERTIES}" | cut -d "=" -f "2" 

(我沒有測試所有這些命令,所以,要當心拼寫錯誤。)

+0

感謝您提供清晰,詳盡且翔實的答案!幫助我理解發生了什麼。現在正在批量生產0403-010。 – y2k 2012-01-18 16:38:04