如何将传递给脚本的参数传递给另一个命令

shell编程通常的一种任务就是为命令编写包装脚本。包装脚本中可能需要定义一些变量,或者在某个特定的命令执行前改变环境变量。在编写这些脚本时,要将传递给这个脚本的参数传递给将要执行的命令。通常下的做法就足够了:
[code:1]cmd $@[/code:1]
这种做法存在的一个问题是,如果没有任何参数传递给包装脚本,有些版本的shell就会将$@扩展为""。如果没有镇定任何参数,应该执行命令cmd,而不是cmd  "" 。 要避免这个问题,可以使用命令

[code:1]${@:+$@}[/code:1]
实际上这个是变量置换的一种形式。在这里,这个命令检查变量$@是否包含一个值。如果有,就用它置换变量$@。如果没有为脚本提供任何命令行参数,则$@的值为null,这时就不会发生变量置换。