我正在寻找一种方法来让bash命令传递默认参数来代替0参数。例如,当将$ ls传递给命令行时,用户实际上会将$ ls --color传递给命令行。
答案 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
将在别名调用之后作为其参数(可能一点都不是)。
对我来说,这是在脚本中为某些特定目的使用别名的主要原因,否则函数通常会更好,能够接收参数,包含局部变量......