Unix zsh:来自awk printf的意外输出

Unix zsh:来自awk printf的意外输出,unix,awk,printf,zsh,Unix,Awk,Printf,Zsh,在bash中,我可以执行以下操作: $ printf "foo\nbar\n" | awk '{printf "%s\n", $1}' foo bar …但在zsh中,当我做同样的事情时,我得到了: $ printf "foo\nbar\n" | awk '{printf "%s\n", $1}' [m\n", printf}'foo bar 我做错了什么?我也在使用zsh,并且得到了正确的(您期望的)输出 您可能需要在.zshrc文件中签入几点 如果printf是别名 您是否使用preex

在bash中,我可以执行以下操作:

$ printf "foo\nbar\n" | awk '{printf "%s\n", $1}'
foo
bar
…但在zsh中,当我做同样的事情时,我得到了:

$ printf "foo\nbar\n" | awk '{printf "%s\n", $1}'
[m\n", printf}'foo
bar

我做错了什么?

我也在使用zsh,并且得到了正确的(您期望的)输出

您可能需要在.zshrc文件中签入几点

  • 如果printf是别名
  • 您是否使用preexec()自定义了zsh?比如带 为你的作品准备一些五颜六色的眼糖
  • 我想第二点就是你问题的原因。因为从您的“错误”输出来看,第一部分看起来很像一个颜色表达式。如果在.zshrc中找到preexe(),请将其注释掉,然后再次尝试使用printf | awk

    希望能有帮助


    祝你好运。

    你有没有可能使用oh my zsh?由于自动终端标题设置中的提示展开,终端设置中存在一个错误,导致它评估命令(如printf和date)中的%标记(以及子命令
    $()
    !)

    查看
    ~/.oh my zsh/termsupport.sh
    并应用此更改:

    *** termsupport.zsh.orig    2012-01-31 10:49:57.503119973 +0100
    --- termsupport.zsh 2012-01-31 10:50:55.043118110 +0100
    ***************
    *** 24,31 ****
      function omz_termsupport_preexec {
        emulate -L zsh
        setopt extended_glob
    !   local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd
    !   title "$CMD" "%100>...>$2%<<"
      }
    
      autoload -U add-zsh-hook
    --- 24,35 ----
      function omz_termsupport_preexec {
        emulate -L zsh
        setopt extended_glob
    !   local CMD_1=${1[(wr)^(*=*|sudo|ssh|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd
    !   local CMD_2=${2//\$\(/\\\$(} # ')}
    !   CMD_1=${CMD_1//\%/%%}          
    !   CMD_2=${CMD_2//\%/%%}          
    !   #
    !   title "${CMD_1}" "%100>...>${CMD_2}%<<"
      }
    
      autoload -U add-zsh-hook
    
    ***termsupport.zsh.orig 2012-01-31 10:49:57.503119973+0100
    ---termsupport.zsh 2012-01-31 10:50:55.043118110+0100
    ***************
    *** 24,31 ****
    功能omz_术语支持_preexec{
    仿真-lzsh
    setopt扩展_glob
    !local CMD=${1[(wr)^(*=*|sudo | ssh |-*)]}仅限CMD名称,或者如果这是sudo或ssh,则为下一个CMD
    
    !title“$CMD”“%100>…>$2%${CMD_2}%I获得相同的
    foo
    (换行符)
    bar
    你期望的输出。你确定你没有在什么地方打字吗?是的,我已经打了大约一百万次了,尝试了很多不同的书写方式,总是能得到输出:/你为它设置了别名吗?没有。我实际上想做的是有点不同的-这只是演示在Behavior.打开本地shell调试,查看是否显示任何别名或函数扩展正在发生,即
    set-vx
    。祝您好运。更具体地说,问题是由以下原因引起的。