【问题标题】:Bash : why variables are not read in the HEREDOC?Bash:为什么在 HEREDOC 中没有读取变量?
【发布时间】:2015-03-14 13:04:45
【问题描述】:

我有文件启动器

#! /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

函数在启动器中运行。 var __name (2 个下划线)在 makeconfig 中被很好地阅读用于制作文件的名称,但在 heredoc 中不再阅读以产生注释。 删除或不删除下划线,导出或不导出变量似乎没有效果。

【问题讨论】:

标签: bash function scope heredoc


【解决方案1】:

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

改变

 cat <<"EOD"

 cat <<EOD

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2019-02-05
    • 2016-01-22
    • 2022-12-06
    相关资源
    最近更新 更多