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

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

我有一个简单的命令行:

uptime | awk '{print $(NF - 2)}'

在 bash shell 中,这可以正常工作,但是当我在 zsh 中运行它时,出现以下错误:

title:5: command not found: NF

像往常一样,这将是一个试点错误(我不明白扩展在 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 ''

显然 awk 命令可以工作,但我的终端定制失败了。

答案1

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}#\$\'}%\'}//\\\'/'}

相关内容