Bash:为什么在HEREDOC中没有读取变量?

时间:2015-01-16 00:03:08

标签: bash function scope heredoc

我有启动器

文件
#! /bin/bash
. ./lib/utils

_name="microapplication-launcher"
_version="0.1"
_shortname="launcher"

DEFAULTS=$(cat <<'EOD'
# openning-prefs : terminal browser folder
launcher-openning-prefs=TRUE|FALSE|TRUE|
EOD
)
CONFIG="$( makeconfig )"

文件 ./ lib / utils

__name="microapplication"
#export __name
__version="0.1"
#export __version

CONFIGDIR=~/.config/$__name
CONFIG=""
APPPATH="$HOME/Site/local"
export APPPATH

function makeconfig {
    # global config
    CONFIG="$CONFIGDIR/$__name.conf";


    [ ! -d $CONFIGDIR ] && mkdir $CONFIGDIR

    [ ! -f $CONFIG ] && cat <<"EOD" > $CONFIG
# $__name $__version
app-path=$APPPATH

EOD
}

运行时,使用

生成〜/ .config / microapplication / microapplication.conf
# $__name $__version
app-path=$APPPATH

该功能在启动器中运行。在 makeconfig 中可以很好地读取var __ name (2个下划线)以获取文件的名称,但是在heredoc中不再读取以生成注释。 删除或不删除下划线,导出或不导出变量似乎没有效果。

1 个答案:

答案 0 :(得分:3)

如果引用分隔符,则不会扩展HEREDOC中的变量。

更改

 cat <<"EOD"

 cat <<EOD