如何在 zsh 中操作 awk 变量 NF?

hel*_*geg 1 zsh awk

我有一个简单的命令行:

uptime | awk '{print $(NF - 2)}'
Run Code Online (Sandbox Code Playgroud)

在 bash shell 中,这可以顺利运行,但是当我在 zsh 中运行它时,出现以下错误:

title:5: command not found: NF
Run Code Online (Sandbox Code Playgroud)

像往常一样,这将是一个试点错误(我不知道扩展是如何在 zsh 中工作的),但我不知道如何使相同的命令在 zsh 中工作。

[编辑]

OSX 上的 zsh 版本为 4.3.11,输出set -xv; uptime | awk '{print $(NF - 2)}'为:

$ set -xv; uptime | awk '{print $(NF - 2)}'
title:5: command not found: NF
+zsh:3> uptime
+zsh:3> awk '{print $(NF - 2)}'
0.51
+precmd:1> title '%15<..<%~%<<' '%n@%m: %~'                                                                           
+title:1> [ '' '!=' true ']'
+title:2> [[ xterm-256color == screen* ]]
+title:4> [[ xterm-256color == xterm* ]]
+title:5> print -Pn '\e]2;%n@%m:\ %~\a'
+title:6> print -Pn '\e]1;%15\<..\<%~%\<\<\a'
+zsh:4> git_prompt_info
+git_prompt_info:1> ref=+git_prompt_info:1> ref='' 
+git_prompt_info:1> return
+zsh:4> vi_mode_prompt_info
+vi_mode_prompt_info:1> echo ''
Run Code Online (Sandbox Code Playgroud)

显然 awk 命令有效,但我的终端定制被取消了。

Gil*_*il' 5

title:5: command not found: NF

此错误消息显示名为 的函数中的错误,该函数title的名称可能将终端的标题设置为正在运行的命令。随后的脚本显示title被调用precmd,当命令完成执行时调用,就在显示下一个提示之前。但错误实际上是由 触发的preexec,它在运行命令之前被调用。此函数在您的~/.zshrc(或者可能是/etc/zshrc,或者它们中任何一个调用的文件中)定义。

如果没有看到代码,我无法确切地知道出了什么问题,但看起来命令字符串正在以某种方式扩展。也许您prompt_subst设置了选项并且正在通过print -P? 您需要转义命令。特别是,不要打印它print -P,打印它print -r并注意文字控制字符。就像是:

print -r ${${${${(qqqq)1}#\$\'}%\'}//\\\'/'}
Run Code Online (Sandbox Code Playgroud)