为什么位置参数$ 1有不同的值?

时间:2012-07-05 06:25:49

标签: linux shell command-line

我是Linux的初学者,我一直在学习shell脚本,我在理解位置参数方面遇到了一些麻烦。我首先在终端输入类似的内容:

set this is a great place

我跑:

echo $1

它显示:

this

然后我尝试了一个shell脚本文件 test.sh

#!/bash/sh
echo $1

我在终端上运行shell脚本:

sh test.sh
它没有显示任何内容。而且,如果我跑:

sh test.sh hello

它会在屏幕上显示 hello 。但是,如果我只是跑:

echo $1
终端命令行上的

。它仍会显示

为什么两个地方1美元的价值不同?

2 个答案:

答案 0 :(得分:0)

$ 1($ 2等)是当前shell (或shell脚本)的参数

set builtin用新的参数替换当前的参数集。

% cat test.sh
#!/bash/sh
echo $1
set X Y Z
echo $1

# No args given, so $1 will start set to A, set will change it to X
% sh test.sh

X
# Args given, $1 will start set to A, set will change it to X
% sh test.sh A B C
A
X

答案 1 :(得分:0)

PL。看看这个解释是否有帮助,

你可以在这里考虑两个过程,一个是具有一组变量的当前shell。

键入时,

set this is a great place 

当前shell的变量得到更新。

现在输入

sh test.sh  

这意味着您现在拥有一个单独的流程和自己的一组变量。现在那两个 变量集不一样。所以在这种情况下,你得到一个不同的输出。

Apple的一个非常好的shell脚本编写教程可以在下面找到,

https://developer.apple.com/library/mac/#documentation/opensource/conceptual/shellscripting/Introduction/Introduction.html