Variable expansion is different in zsh from that in bash

倾然丶 夕夏残阳落幕 提交于 2019-11-28 09:11:17

The difference is that (by default) zsh does not do word splitting for unquoted parameter expansions.

You can enable “normal” word splitting by setting the SH_WORD_SPLIT option or by using the = flag on an individual expansion:

ls ${=args}

or

setopt SH_WORD_SPLIT
ls $args

If your target shells support arrays (ksh, bash, zsh), then you may be better off using an array:

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

From the zsh FAQ:

From the zsh Manual:

  • 14.3 Parameter Expansion

    Note in particular the fact that words of unquoted parameters are not automatically split on whitespace unless the option SH_WORD_SPLIT is set; see references to this option below for more details. This is an important difference from other shells.

  • SH_WORD_SPLIT

    Causes field splitting to be performed on unquoted parameter expansions.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!