我想在我所有的 Python 文件中搜索字符串 '.vars()',不知何故我重新定义了 'grep' 如下:
% grep .vars() *.py
% which grep
grep () {
*.py
}
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用unset grep
并export grep=/bin/grep
纠正这个问题,但没有成功。有人可以解释一下我不小心做了什么吗?
注意:在 Bash 中,它失败了:
“意外标记‘(’附近的语法错误”。
And*_*ton 15
这定义了两个函数,一个名为grep
,另一个名为vars
,其主体为*.py
:
grep .vars() *.py
Run Code Online (Sandbox Code Playgroud)
要删除这些功能 --- 并取消阴影grep
--- 您需要:
$ unset -f grep .vars
Run Code Online (Sandbox Code Playgroud)
来自man zshbuiltins
:
Run Code Online (Sandbox Code Playgroud)$ unset -f grep .vars
这是一个函数定义。更准确地说,这是两个具有相同代码的函数的定义。它看起来很不寻常,因为 zsh 对函数定义的基本语法有几个扩展name () { instruction; … }
:
name1 name2 () { instruction; … }
定义了函数name1
和name2
相同的主体。我不知道有任何其他 shell 支持这个。.
输入函数名称(例如 bash,但不允许使用 dash 或 ksh93)。可移植函数名只能使用 ASCII 字母、数字和下划线。name () { instruction; … }
Run Code Online (Sandbox Code Playgroud)
是最常见的形式,其中身体是一个群体。
name () ( instruction; )
Run Code Online (Sandbox Code Playgroud)
也是可移植的,并在子外壳中运行函数体。其他复合命令在技术上是有效的,例如
name () if condition; then instruction1; else instruction2; fi
Run Code Online (Sandbox Code Playgroud)
是一个符合 POSIX 的函数定义,但在实践中非常不寻常。
name () echo hello
Run Code Online (Sandbox Code Playgroud)
根据 zsh(以及 ksh 和 dash)是一个完全有效的函数定义,但不是根据 POSIX 或 bash。()
在所有 shell 中都是可选的。要撤消 的效果grep .vars() *.py
,请取消设置这两个函数。
unset -f grep .vars
Run Code Online (Sandbox Code Playgroud)
或者
unfunction grep .vars
Run Code Online (Sandbox Code Playgroud)
您已经定义了一个函数。这仅在当前 shell 中有效。
一个简单的函数就像
f() echo hello
Run Code Online (Sandbox Code Playgroud)
现在“f”命令会打招呼
$ f
hello
Run Code Online (Sandbox Code Playgroud)
清除它的最简单方法是使用unset -f
命令。
在你的情况下:
unset -f grep
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
964 次 |
最近记录: |