unset bash 具有非标准名称的函数变量
unset bash function variable with non-standard name
我可以在 bash 脚本中使用此函数,该脚本获取 shell
function suman{
echo "using suman function"
}
如果我打电话给
unset suman
事情似乎按预期进行
然而,如果我有这个作为我的功能:
function suman-inspect {
echo "using suman-inspect function"
}
那如果我打电话
unset suman-inspect
或
unset "suman-inspect"
我收到这条消息:
bash: unset: `suman-inspect': not a valid identifier
如何取消设置这个变量?
经过更多研究,似乎
unset -f "suman-inspect"
会起作用。这是令人惊讶的,因为 unset suman
确实有效,并且成功取消设置了 suman 函数(据我所知)。
Bash 允许在不处于 posix 模式时创建名称不是有效标识符的函数。
所以:
set -o posix
function suman-inspect { echo "using suman-inspect function"; }
给出:
bash: `suman-inspect': not a valid identifier
ruakh 通过引用 man bash
提出了一个有效的观点。源代码 (builtins/set.def
) 有注释:Posix.2 表示先尝试变量,然后是函数 ,但是 ...
POSIX standard表示如果-f和-v都没有指定,name指的是一个变量;如果不存在具有该名称的变量,则未指定是否应取消设置具有该名称的函数(如果有)。
所以实际上行为是旧备用"未指定*。如果有的话,错误在 bash 文档中。但公平地说,在 man bash
的其他地方它说:
可以使用 unset 内置函数的 -f 选项删除函数定义。
我可以在 bash 脚本中使用此函数,该脚本获取 shell
function suman{
echo "using suman function"
}
如果我打电话给
unset suman
事情似乎按预期进行
然而,如果我有这个作为我的功能:
function suman-inspect {
echo "using suman-inspect function"
}
那如果我打电话
unset suman-inspect
或
unset "suman-inspect"
我收到这条消息:
bash: unset: `suman-inspect': not a valid identifier
如何取消设置这个变量?
经过更多研究,似乎
unset -f "suman-inspect"
会起作用。这是令人惊讶的,因为 unset suman
确实有效,并且成功取消设置了 suman 函数(据我所知)。
Bash 允许在不处于 posix 模式时创建名称不是有效标识符的函数。
所以:
set -o posix
function suman-inspect { echo "using suman-inspect function"; }
给出:
bash: `suman-inspect': not a valid identifier
ruakh 通过引用 man bash
提出了一个有效的观点。源代码 (builtins/set.def
) 有注释:Posix.2 表示先尝试变量,然后是函数 ,但是 ...
POSIX standard表示如果-f和-v都没有指定,name指的是一个变量;如果不存在具有该名称的变量,则未指定是否应取消设置具有该名称的函数(如果有)。
所以实际上行为是旧备用"未指定*。如果有的话,错误在 bash 文档中。但公平地说,在 man bash
的其他地方它说:
可以使用 unset 内置函数的 -f 选项删除函数定义。