我在bash中发现了一个奇怪的问题,我使用了如下的HERE-doc
source <(cat << EOL | tee /tmp/buildvar_eval.sh
TODAY=$(date +%y%m%d)
PATH_JOB=$HOME
PATH_SRC=${PATH_JOB}/aaaa
PATH_OUT=${PATH_SRC}/bbbb
echo [$PATH_SRC][$PATH_OUT]
EOL
)
What I expected is [/home/myaccount/aaaa][/home/myaccount/bbbb]
but it outpus below.
I executed it same terminal 4 times.
1st try: it print out [][]
2nd try: it print out [aaaa][bbbb]
3rd try: it print out [/home/myaccount/aaaa][/home/myaccount/bbbb]
4th try: it print out [/home/myaccount/aaaa][/home/myaccount/bbbb]
它似乎没有在HERE-doc中重新评估价值
Q1.造成这种情况的根本原因是什么?
Q2.有没有其他方法可以克服?
1条答案
按热度按时间dpiehjr41#
第一次执行代码时,HERE字符串将被构建。此时,所有变量最初都是空的。你的弦本质上变成了
然后你就可以找到这个字符串的来源。这将导致定义
PATH_SRC
和PATH_OUT
。如果重复这个过程,构造HERE字符串将替换新定义的值,它将变为如果将构建字符串与获取字符串分开,您可以更容易地看到发生了什么:
现在重复这个过程,观察字符串是如何以不同的方式构建的,因为
source
命令导致了变量的定义。