为bash命令设置默认参数/参数

时间:2017-03-03 02:30:16

标签: bash shell command-line

我正在寻找一种方法来让bash命令传递默认参数来代替0参数。例如,当将$ ls传递给命令行时,用户实际上会将$ ls --color传递给命令行。

1 个答案:

答案 0 :(得分:1)

您可以使用函数或别名。

如果您想为所有ls次调用添加前缀以及其他选项,则可以定义如下别名:

alias ls="ls --color"

这就像每次使用ls时隐式使用该选项一样。调用时,别名将由其指定的值替换。必须在命令的开头使用别名,扩展的别名将成为将被解释的最终语句的一部分。换句话说,别名是自动文本替换的一种形式,并且在他们可以做的事情上非常有限。

正如Barmar所建议的那样,你也可以使用一个函数,它只允许你在没有参数的情况下使用你的默认参数(或其中一些参数):

ls()
{
   if
     (( $# )) # True if at least one argument present
   then
     command ls "$@"
   else
     command ls --color
   fi
}

别名允许函数不能在与调用上下文相同的上下文中执行(它们是文本替换的形式,而不是函数调用),因此它们可以与位置参数交互。例如,您可以使用这样的别名:

alias shift_and_echo="shift ; echo"

这实际上会将位置参数转换为使用别名的活动位置,这与函数调用相反,后者只会移动自己的参数并使调用上下文位置参数不受影响。 echo将在别名调用之后作为其参数(可能一点都不是)。

对我来说,这是在脚本中为某些特定目的使用别名的主要原因,否则函数通常会更好,能够接收参数,包含局部变量......