为什么sh / bash在尝试设置环境变量时会设置命令行参数值?

时间:2010-05-26 13:38:49

标签: bash shell environment-variables command-line-arguments sh

关于基础知识的问题:在调整从脚本启动的程序的环境变量时,我最终得到了一些奇怪的sh行为(似乎实际上与bash相关联):变量设置似乎搞乱了命令行参数。

有人可以解释为什么会这样吗?

一个简单的脚本:

#! /bin/sh

# Messes with $1 ??
set ANT_OPTS=-Xmx512M
export ANT_OPTS

# Works
# export ANT_OPTS=-Xmx512M

echo "0 = $0"
echo "1 = $1"

当我使用上部替代(set + export)运行时,结果如下:

$ ./test.sh foo
0 = ./test.sh
1 = ANT_OPTS=-Xmx512M

但是如果选择较低(直接导出),结果就像我想的那样:

$ ./test.sh foo
0 = ./test.sh
1 = foo

肯定有合理的解释,我还没想出来。有想法的人吗?

br,Touko

2 个答案:

答案 0 :(得分:4)

您应该使用ANT_OPTS=-Xmx512M代替set ANT_OPTS=-Xmx512M

更新:有关sethere的讨论,请参阅the manual

答案 1 :(得分:2)

“set”不是Bourne Shell中设置变量的一部分。那应该是

ANT_OPTS=-Xmx512m
export ANT_OPTS