如何使select操作符的行为类似于zsh中的bash
我正在尝试在zsh中使用下一个代码:如何使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
select var in $list; do
if [ x"$var" != x"" ]; then
echo $var
return
fi
done
在bash中,会产生如下结果:
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