2013-04-08 76 views
0

我在腳本中使用下面的部分來替換文件中的變量。

但是在運行這部分腳本之後,腳本會忽略「&」符號。是否有這種行爲的原因?

while read line 
    do 
    eval echo "$line" >> output.txt 
    done < "input" 

我輸入文件看起來像下面

XXX.6.ID=LCPR_PROJ& 
XXX.6.VALUE=$PMS& 
XXX.6.CTID=58& 
XXX.6.ECID=1032& 
XXX.6.SEC= 

運行該命令後,我的輸出看起來像下面

XXX.6.ID=LCPR_PROJ 
XXX.6.VALUE=132 
XXX.6.CTID=58 
XXX.6.ECID=1032 
XXX.6.SEC= 

我需要改變我的命令的東西嗎?

回答

4

你不想使用eval

eval將單獨評估表達式,並解釋&字符。

&字符告訴bash在子shell中運行該命令。從Bash man page

如果一個命令是由操作者控制終止&,殼執行在子shell後臺命令。

從腳本

while read line 
    do 
    echo "$line" >> output.txt 
    done < "input" 

拆下,預期它會奏效。

如果希望通過eval運行的每一行,你知道你在做什麼,那麼你將不得不手動檢測和逃避& S:

while read line; do 
    line=${line/&/\\&} 
    eval echo "$line"; 
done 

通過使用bash's string manipulation

+0

+1我在op的帖子中沒有看到eval! :D – Kent 2013-04-08 12:11:11

+0

感謝您的信息 – user2190101 2013-04-08 13:11:25