我想创建一个在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的。
如果您想要在zsh
和bash
中工作的东西,请使用数组。
LS_OPTIONS=(-l -a) && ls "${LS_OPTIONS[@]}"
您可以在zsh
中设置SH_WORD_SPLIT
选项,使参数展开像bash
一样进行分词,但bash
中的未引号扩展也受到路径名展开的影响,因此我不建议使用它们。
你的LS_OPTIONS将作为单个参数传递给ls
,当然ls
不能处理它。
alias ls='ls ${(z)LS_OPTIONS}'
(z)将值分割为空白,并作为单独的参数传递给ls
。