我是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美元的价值不同?
答案 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脚本编写教程可以在下面找到,