Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在交互式shell的函数参数中关闭ZSH glob扩展_Zsh_Glob - Fatal编程技术网

在交互式shell的函数参数中关闭ZSH glob扩展

在交互式shell的函数参数中关闭ZSH glob扩展,zsh,glob,Zsh,Glob,当我发现自己在算术上遇到麻烦时,我喜欢简单地在壳上计算 > echo $(( 3**4 - 2/7*5 )) 这当然很好用。但是,我发现输入太多了,所以我定义了 function §() echo $(( $@ )) 这让我可以 > § '3**4 - 2/7*5' 但不是 > § 3**4 - 2/7*5 因为zsh告诉我它找不到匹配项,或者更糟,所以如果有一些匹配项,它会扩展文件名 如何告诉zsh shell我希望它不要将作为函数参数输入的内容解释为glob

当我发现自己在算术上遇到麻烦时,我喜欢简单地在壳上计算

> echo $(( 3**4 - 2/7*5 ))
这当然很好用。但是,我发现输入太多了,所以我定义了

function §()
    echo $(( $@ ))
这让我可以

> § '3**4 - 2/7*5'
但不是

> § 3**4 - 2/7*5
因为zsh告诉我它找不到匹配项,或者更糟,所以如果有一些匹配项,它会扩展文件名

如何告诉zsh shell我希望它不要将作为函数参数输入的内容解释为globs

我不想做这样的事

> enter_non_glob_mode
> 3**4 - 2/7*5
> back_to_normal_mode
因为我还不如启动dc,python

母亲欧拉对我说,智慧的话语,智慧的力量。。。SCNR.

使用noglob修饰符

% noglob § 3**4 - 2/7*5
81
为了避免每次都必须键入noglob,请使用别名插入修改器。不能将noglob放在函数中,因为在计算主体之前已经进行了路径名扩展

% alias §='noglob §'
% § 3**4 - 2/7*5
81

极好的解决方案!我不知道alias在globbing之前适用,只是出于好奇:为什么定义一个没有花括号的函数会有效?我可以看出它确实有效,但手册上说:虚词。。。[]术语]{list}。。。函数的主体是{和}之间的列表,并且没有解释术语的含义。这是一个非常有效的问题。我经常发现zsh手册页在您想要查找内置时是令人满意的,但是在语言细节方面还不够,而且官方的zsh程序员教程也不是很好。不管怎样,从任何其他带有{}代码块的语言来看:一个大括号封装的代码块和一条语句一样好。在C语言中,这甚至被显式地称为复合语句。在ZSH中,他们可能忘了提到它实际上是函数foo语句,其中语句可以是任何东西,包括复合语句。