【发布时间】:2015-06-03 02:45:06
【问题描述】:
通常,我看到有关人们无法从其范围之外访问变量的问题。但是,我似乎遇到了相反的情况:我看到变量仍然具有来自内部范围的值,它们应该在之后放弃。例如(制作类似于git aliases的svn别名):
function svn() {
case $@ in
alias*) shift 1;
for i in "$@"; do
if [[ "$i" == "-t" ]];
then
j="$i,$j"
elif [[ "$i" == "-f" ]];
k="$i,$j"
fi
done
echo "i = $i"
echo "j = $j"
echo "k = $k"
;;
esac
}
我把它放在一个脚本中并获取它,所以它的功能被做成了 bash 的别名(我认为)。尝试使用“-t”和“-f”的各种组合运行它,你会看到变量“$i”、“$j”和“$k”在再次运行脚本时都保持它们的值,并且在脚本退出后它们在外壳中保持不变。我使用的是 Ubuntu 15.04 笔记本电脑,当我输入 Ctrl-X Ctrl-V 我的 shell 输出 GNU bash,版本 4.3.30(1)-release (x86_64-pc-linux-gnu)。
我读过的关于 bash 的所有内容都告诉我这不应该发生(诚然,我在这方面有点初学者)。脚本(或函数)退出后,变量不应保持设置,除非您在它们上使用export,而我没有。那么为什么会这样呢?
【问题讨论】:
-
这是在您正在运行的脚本中吗?还是您正在采购然后在命令行上调用函数的文件?
-
第二个。我认为这对于范围界定并不重要。
标签: bash shell environment-variables