2015-01-16 8 views
1

나는 파일 실행Bash : 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 

이 기능은 실행 프로그램에서 실행됩니다. 파일 이름을 만들기 위해 __name (밑줄 2 개)은 makeconfig으로 잘 읽었지만 더 이상 heredoc에서 주석을 읽지 않습니다. 밑줄을 제거하거나 제거하지 마십시오. 변수를 내보내거나 가져 오지 않아도 효과가없는 것처럼 보입니다.

+0

중복 가능성 (http://stackoverflow.com/questions/4937792/using-variables-inside-a -bash-heredoc) – Thilo

답변

3

구분 기호를 인용 할 경우 HEREDOC의 변수가 확장되지 않습니다. [배시 히어 닥 내부 변수 사용]의

변경

cat <<"EOD" 

cat <<EOD 
+0

참조 : https://www.gnu.org/software/bash/manual/bashref.html#Here-Documents –