小编Mor*_*son的帖子

传递给源脚本的参数错误

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)

我希望这能澄清手头的问题。

由于我似乎得到了很多答案来解释为什么上述方法不起作用,并且没有答案告诉我我应该做什么,我想我会再尝试一次尝试解释我正在尝试做的事情。

要求

我需要编写一个需要至少一个参数的脚本,如果没有使用所述参数调用它就会抱怨(请参阅上面问题中的第一个代码块),并且该脚本需要设置一些环境变量。由于第二个要求,我假设我需要获取脚本的来源,以便在脚本完成时仍然设置环境变量。你怎么能写一个脚本来告诉它什么时候没有传递参数,也可以设置环境变量?

parameter aix shell-script source-command

5
推荐指数
1
解决办法
2331
查看次数

标签 统计

aix ×1

parameter ×1

shell-script ×1

source-command ×1