当我发现自己遇到算术问题时¹,我喜欢简单地在我的外壳上计算
> echo $(( 3**4 - 2/7*5 ))
Run Code Online (Sandbox Code Playgroud)
这当然很好用。但是,我发现打字太多了,所以我定义了
function §()
echo $(( $@ ))
Run Code Online (Sandbox Code Playgroud)
这让我可以
> § '3**4 - 2/7*5'
Run Code Online (Sandbox Code Playgroud)
但不是
> § 3**4 - 2/7*5
Run Code Online (Sandbox Code Playgroud)
因为 zsh 告诉我它找不到匹配项(或者更糟的是,如果有匹配项,则扩展文件名)。
如何告诉 zsh shell 我希望它不将作为函数参数输入的内容解释为 globs?
我不想做类似的事情
> enter_non_glob_mode
> 3**4 - 2/7*5
> back_to_normal_mode
Run Code Online (Sandbox Code Playgroud)
因为取而代之的是,我也开始dc,python...
¹欧拉妈妈对我说话,轻声细语,智慧之言,e... SCNR 的力量。
使用noglob修饰符。
% noglob § 3**4 - 2/7*5
81
Run Code Online (Sandbox Code Playgroud)
为避免noglob每次都键入,请使用别名来插入修饰符。(您不能放入noglob函数内部,因为在评估主体之前已经发生了路径名扩展。)
% alias §='noglob §'
% § 3**4 - 2/7*5
81
Run Code Online (Sandbox Code Playgroud)