AIX 上的一个脚本,它检查传递的参数数量并在它们不正确时进行抱怨:-
if [ "$#" -ge 1 ]; then
...
else
echo 'Usage: myscript <a> [b] [c]'
fi
Run Code Online (Sandbox Code Playgroud)
该脚本设置了一些环境变量,因此它是来源。我的意思是我在命令行上输入以下内容。没有第二个脚本,我不是从另一个脚本中获取脚本。
. ./myscript.sh
Run Code Online (Sandbox Code Playgroud)
如果我不传递任何参数,我希望它打印出使用语句,但它会使用传递给上一个源命令的参数运行(甚至不一定是这个脚本!)。
为了仔细检查这一点,我在脚本的开头添加了这一行以证明情况确实如此。
echo $# $@
Run Code Online (Sandbox Code Playgroud)
如果我不传递任何参数,它会打印出来自先前来源脚本的编号和参数列表。
$#
当我传递零参数并获取它时,如何让它说为零?
最小可能的重新创建是一个脚本,因此:-
脚本文件
echo $# $@
Run Code Online (Sandbox Code Playgroud)
然后运行它: -
. ./myscript.sh a b c
Run Code Online (Sandbox Code Playgroud)
打印出来
3 a b c
Run Code Online (Sandbox Code Playgroud)
然后在没有任何参数的情况下再次运行它:-
. ./myscript.sh
Run Code Online (Sandbox Code Playgroud)
打印出相同的
3 a b c
Run Code Online (Sandbox Code Playgroud)
什么时候打印出来
0
Run Code Online (Sandbox Code Playgroud)
如果您不提供脚本并直接运行它:-
./myscript.sh
Run Code Online (Sandbox Code Playgroud)
然后它按预期工作并打印出来
0
Run Code Online (Sandbox Code Playgroud)
我希望这能澄清手头的问题。
由于我似乎得到了很多答案来解释为什么上述方法不起作用,并且没有答案告诉我我应该做什么,我想我会再尝试一次尝试解释我正在尝试做的事情。
要求
我需要编写一个需要至少一个参数的脚本,如果没有使用所述参数调用它就会抱怨(请参阅上面问题中的第一个代码块),并且该脚本需要设置一些环境变量。由于第二个要求,我假设我需要获取脚本的来源,以便在脚本完成时仍然设置环境变量。你怎么能写一个脚本来告诉它什么时候没有传递参数,也可以设置环境变量?