我正在尝试在zsh中使用下面的代码:
select var in $list; do
if [ x"$var" != x"" ]; then
echo $var
return
fi
done
在bash中,结果会像这样:
- 第一
- 第二
- 第三
- 第一 3. 第三
- 第二
来自Zsh手册:
COLUMNS <S>
The number of columns for this terminal session.
Used for printing select lists and for the line editor.
这里可以正常运行:
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
如果在您的主交互式shell上运行,请恢复COLUMNS的旧值。
x""
语法是什么?我很难找到相关信息。 - undefined
zsh
,您无需使用古老的技巧来防止空字符串。只需使用if [[ -n $var ]]
。 - undefined[[ -n ]]
仍然格式错误,以防有人使用预处理语句。Zsh将其表述为“未知条件:-n”,而不是报告缺少的参数,并提供默认值[[ -n ]] == [[ -n "" ]]
或等效的零元[[ -n ]] == false
。如果其中任何一项发生变化,可能意味着又要添加一个环境变量来在严格/方便/兼容/可移植之间切换。(因此称为“古老的黑客”-遗留代码繁琐但有时更具可移植性,等等,因为shell的差异。这并不是为了辩护,只是我知道Zsh的特性和怪癖意味着我在Bash中会遇到一些问题。) - undefined