文本块中的Bash变量

时间:2013-12-20 00:10:42

标签: 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块?

3 个答案:

答案 0 :(得分:2)

当引用heredoc的分隔符时,不会插入变量。只需删除引号:

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

答案 1 :(得分:1)

你为什么不这么说

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

在你的情况下,没有必要使用read。

如果要将附加文本回显到$ WPA,请执行以下操作:

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

但要注意你以这种方式插入一个额外的换行符 - $ WPA在最后有一个换行符,而在新文本的开头有另一个换行符。为避免这种情况,请使用

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

{}引号分隔变量名称。使用

WPA="$WPAfirst appended line

会查找名为WPAfirst的变量。

答案 2 :(得分:0)

  

是否可以将更多文本附加到WPA块?

$WPA只是一个普通的shell变量(恰好包含一个多行字符串),因此您可以使用+=附加到它; e.g:

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

如果你想附加另一个 heredoc 的内容,请将其分配给一个单独的变量并将其附加到WPA(但是,正如@GuntramBlohm指出的那样,你可以很容易直接分配/附加多行字符串。)