如何从命令行删除别名中的参数集

如何从命令行删除别名中的参数集

我为“ls”设置了一个别名,如下所示:

alias ls='ls -lh'

如果在某个时候我想执行一次性常规 ls,而不使用任何一个参数(没有 l 或没有 h),我该如何在不改变别名的情况下做到这一点?

我尝试了 ls !l、ls -!l 和 ls --l,但这些命令不起作用。是否有否定参数的语法?

答案1

别名替换一个细绳和另外一个细绳。这是在进一步处理该行之前的简单替换。如果别名是

alias ls='ls -lh'

那么ls该行开头的 将被替换为ls -lh. 句号。

如果ls本身提供了一些否定选项的语法,那么后面的选项可以覆盖前面的选项,那么您可以这样做。您可以使用某些选项,例如:

ls --color=yes --color=no

如果ls别名为ls --color=yes并且您输入了ls --color=no,那么实际的命令将包含两个选项,并且输入的那个将获胜,因为这是ls解析和理解其选项的方式。但您不能让选项-l消失。如果别名使其出现,那么它就在那里。

有些工具可能会提供相互矛盾的选项,最后一个选项获胜;或者第一个选项获胜。有些工具可能会提供一种方法来否定几乎所有的选项(例如--foovs. --no-foo--barvs. --no-bar)。据我所知,这始终取决于工具,并且没有广泛的惯例。

您可以不使用别名

\ls
command ls
/bin/ls
"ls"
'ls'

这些中的每一个都不会触发别名,因此您可以附加所需的选项集。

在 Bash 中,你可以在敲击 之前展开行Enter。默认绑定是Ctrl++ Alte这使得以下操作成为可能:

  1. 类型ls
  2. 点击Ctrl+ Alt+ e,你会看到你的别名已经扩展。
  3. 编辑该行并删除不需要的选项。
  4. 添加在前面\,这样下一步之后别名就不会再次扩展。
  5. 点击Enter执行。

其他 shell 可能提供类似的功能。

对于特定的别名,这并不太引人注目,因为您可以轻松手动输入所需的命令。对于复杂的别名,它可能非常有用:您可以进行一些编辑,而不是重新输入所有内容。

相关内容