我为“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
消失。如果别名使其出现,那么它就在那里。
有些工具可能会提供相互矛盾的选项,最后一个选项获胜;或者第一个选项获胜。有些工具可能会提供一种方法来否定几乎所有的选项(例如--foo
vs. --no-foo
;--bar
vs. --no-bar
)。据我所知,这始终取决于工具,并且没有广泛的惯例。
您可以不使用别名:
\ls
command ls
/bin/ls
"ls"
'ls'
这些中的每一个都不会触发别名,因此您可以附加所需的选项集。
在 Bash 中,你可以在敲击 之前展开行Enter。默认绑定是Ctrl++ Alt。e这使得以下操作成为可能:
- 类型
ls
。 - 点击Ctrl+ Alt+ e,你会看到你的别名已经扩展。
- 编辑该行并删除不需要的选项。
- 添加在前面
\
,这样下一步之后别名就不会再次扩展。 - 点击Enter执行。
其他 shell 可能提供类似的功能。
对于特定的别名,这并不太引人注目,因为您可以轻松手动输入所需的命令。对于复杂的别名,它可能非常有用:您可以进行一些编辑,而不是重新输入所有内容。