如何使select操作符的行为类似于zsh中的bash

如何使select操作符的行为类似于zsh中的bash,select,zsh,Select,Zsh,我正在尝试在zsh中使用下一个代码: select var in $list; do if [ x"$var" != x"" ]; then echo $var return fi done 在bash中,会产生如下结果: 首先 第二 第三 但在zsh中,我得到了以下信息: 前三名。第三 第二 我如何才能在新行上打印每个变体?来自Zsh手册: COLUMNS <S> The number of columns for this terminal

我正在尝试在zsh中使用下一个代码:

select var in $list; do
  if [ x"$var" != x"" ]; then
    echo $var
    return
  fi
done
在bash中,会产生如下结果:

  • 首先
  • 第二
  • 第三
  • 但在zsh中,我得到了以下信息:

  • 前三名。第三
  • 第二
  • 我如何才能在新行上打印每个变体?

    来自Zsh手册:

     COLUMNS <S>
         The number of columns for this terminal session.  
         Used for printing select lists and for the line editor.
    

    如果在主交互式shell上运行,请还原列的旧值。

    使用
    zsh
    ,您不需要使用古老的hack来防止空字符串。如果[[-n$var]]
    [[[-n]]]
    格式仍然不正确,只要使用
    ,以防有人使用预先准备好的语句。Zsh将其表述为
    未知条件:-n
    ,而不是报告缺少的参数,而是提供默认值
    [[-n]]=[[-n”“]]=[[-n”“]]
    或等效值。空值
    [[-n]==false
    。如果其中任何一项发生变化,可能意味着另一个环境变量将在严格/方便/兼容/可移植之间滑动。(因此“古老的黑客”——遗产很麻烦,但有时更便于携带,等等。随着炮弹的散开。这不是防御,我只知道Zsh的特点和怪癖意味着我会在Bash中绊倒一段时间。)
    emulate -L zsh
    setopt sh_word_split
    # if not running in a separate shell, you'll want to restore the old value
    export COLUMNS=1
    list="first second third"
    select var in $list; do
      if [ x"$var" != x"" ]; then
        echo $var
      return
      fi
    done