让ZSH传递一个变量作为空格分隔的参数



我想创建一个在zsh和bash中工作的别名,但奇怪的是,zsh试图传递一个未引用的变量作为单个参数:

❯ zsh -f
grasshopper% LS_OPTIONS="-l -a" && ls $LS_OPTIONS
ls: invalid option -- ' '
Try 'ls --help' for more information.
grasshopper% bash --norc
bash-5.1$ LS_OPTIONS="-l -a" && ls $LS_OPTIONS
total 0
drwxr-xr-x  2 janekf janekf   40 28. Nov 14:02 .
drwxrwxrwt 24 root   root   2400 28. Nov 16:41 ..

有停止的选项吗?

请参见在zsh中使用变量作为命令参数,但答案是特定于zsh的。

如果您想要在zshbash中工作的东西,请使用数组。

LS_OPTIONS=(-l -a) && ls "${LS_OPTIONS[@]}"

您可以在zsh中设置SH_WORD_SPLIT选项,使参数展开像bash一样进行分词,但bash中的未引号扩展也受到路径名展开的影响,因此我不建议使用它们。

你的LS_OPTIONS将作为单个参数传递给ls,当然ls不能处理它。

在zsh中,将别名定义为
alias ls='ls ${(z)LS_OPTIONS}'

(z)将值分割为空白,并作为单独的参数传递给ls

相关内容

  • 没有找到相关文章

最新更新