2017-03-03 232 views
0

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

+0

您可以编写一个调用的函数'ls',运行'/ bin/ls'。如果给它的参数传递它们,否则它会使用默认参数运行它。 – Barmar

+0

有些命令在环境变量中查找默认设置。查看你感兴趣的命令的文档。 – Barmar

+0

一个例子是'less',它使用'LESS'环境变量来获取默认选项。 – Barmar

回答

1

您可以使用函数或别名。

如果你想与您更多的选择,前缀的所有ls调用,您可以定义一个别名是这样的:

alias ls="ls --color" 

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

正如Barmar建议,你也可以使用一个功能,它允许您使用默认参数(或其中的一些)只有在完全没有参数如下:

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

一件事别名允许函数不能在与调用上下文相同的上下文中执行(它们是文本替换的形式,而不是函数调用),因此它们可以与位置参数进行交互。举个例子,你可以有这样一个别名:

alias shift_and_echo="shift ; echo" 

这实际上转移了位置参数作为活跃在使用别名,违背了一个函数调用,它只会改变其自身的参数,并留下电话上下文位置参数不受影响。 echo会有别名调用之后的任何参数(它可能什么也没有)。

对我来说,这是在为某些特定目的脚本中使用别名的主要原因,否则功能一般较好,能够接收参数,包括局部变量...

+0

ls函数重复调用本身并崩溃。 – warrens

+0

讨厌而明显的错误!更新版本应避免递归调用。 – Fred