2013-12-20 48 views
0

我正在試圖將變量放入一個文本塊中,該文本塊稍後將被回顯到文件中。文本塊內的Bash變量

問題是$ VAR沒有被轉換成變量的值?

VAR="SOME Value" 

read -d '' WPA <<"BLOCK" 
Description='WIFI' 
Interface=wlan0 
Connection=wireless 
IP=dhcp 
Security=wpa 
Key=$VAR 
BLOCK 

echo "$WPA" 

此外,是否有可能追加進一步的文本到WPA塊?

回答

1

你爲什麼不只是說

WPA="Description='WIFI' 
Interface=wlan0 
Connection=wireless 
IP=dhcp 
Security=wpa 
Key=$VAR 
" 

在你的情況下沒有必要使用閱讀。

如果要追加文本呼應$ WPA,像這樣做:

WPA="$WPA 
first appended line 
second appended line 
" 

但要注意,你插入額外的換行符這樣 - $ WPA在年底有一個換行符並有另一一個在新文本的開頭。爲避免這種情況,請使用

WPA="${WPA}first appended line 
second appended line 
" 

{}引號分隔變量名稱。使用

WPA="$WPAfirst appended line 

將查找名爲WPAfirst的變量。

2

當您引用heredoc的分隔符時,變量不會被插值。剛落引號:

read -d '' WPA <<BLOCK 
Description='WIFI' 
Interface=wlan0 
Connection=wireless 
IP=dhcp 
Security=wpa 
Key=$VAR 
BLOCK 
0

,纔有可能進一步文本追加到WPA塊?

$WPA只是一個普通的殼變量(即恰好包含一個多行字符串),這樣就可以追加到它與+=;例如:

WPA+=$'\nanother line\nand another' 

如果你想另一個定界符的內容追加,將其分配給一個單獨的變量和追加,要WPA(但是,正如@GuntramBlohm所指出的,你可以很輕鬆地分配/追加一個多行字符串直接)。