全局变量不像局部变量?

时间:2014-10-13 16:22:04

标签: bash shell variables global local

我有两个bash脚本。 Script1执行以下操作(为什么我使用两个脚本并不重要;只是假设它有充分的理由):

export RUN=1

和script2:

. script1
echo ${RUN}
sed -n ${RUN}p mytext.txt > mytextnew.txt

在脚本2中,echo返回" 1"正如我所料。但是,sed命令(或我尝试使用RUN变量的任何其他命令)会返回错误,就好像RUN不存在一样。如果我只使用以下命令运行script2:

RUN=2p
sed -n ${RUN} mytext.txt > mytextnew.txt

然后一切正常。此与全局变量一起发生。如果我对使用全局变量的局部变量执行完全相同的操作,一切正常。但是,当一个全局变量被抛入其中时,一切都变得混乱。

对问题的任何见解?

1 个答案:

答案 0 :(得分:0)

以下内容:

$ cat script1
export RUN=1

$cat script2
. script1
echo ${RUN}
sed -n ${RUN}p /etc/passwd

之后

$ bash -x script2

打印

+ . script1
++ export RUN=1
++ RUN=1
+ echo 1
1
+ sed -n 1p /etc/passwd

如果将空格添加到

sed -n ${RUN} p /etc/passwd

打印

sed: -e expression #1, char 1: missing command

使用

检查$ RUN的内容
echo "${RUN}" | od -bc    #note the double quotes
#or
echo "${RUN}" | xxd

看看,真正包含$RUN变量...

的内容