zsh에서 awk 변수 NF를 조작하는 방법은 무엇입니까?

zsh에서 awk 변수 NF를 조작하는 방법은 무엇입니까?

간단한 명령줄이 있습니다.

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

Bash 쉘에서는 잘 작동하지만 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}#\$\'}%\'}//\\\'/'}

관련 정보