Zsh中如何实现variadic assignment?代码出现解析错误求助
Zsh 可变参数赋值的正确实现
你遇到的解析错误是因为Zsh不支持(a, b)=...这种多变量赋值语法,以下是几种正确的实现方式:
方式一:直接逐个赋值(简单场景)
适合变量数量固定的情况,直接对每个变量赋值对应位置的参数:
variadic() { local a b a=$1 b=$2 echo "$a, $b!" }
调用后输出:
$ variadic Hello world Hello, world!
方式二:数组拆分赋值(通用场景)
如果需要处理带空格的参数或者更复杂的参数列表,先将所有参数存入数组,再从数组中取值:
variadic() { local -a args=("$@") local a b a=${args[1]} b=${args[2]} echo "$a, $b!" }
这种方式能正确处理带空格的参数,比如:
$ variadic "Hello there" world Hello there, world!
方式三:使用read命令赋值
利用read的多变量读取特性,结合参数展开实现:
variadic() { local a b read -r a b <<< "${(F)@}" echo "$a, $b!" }
这里${(F)@}会将每个参数作为单独一行传递给read,确保带空格的参数不会被错误拆分。
内容的提问来源于stack exchange,提问作者Edward Garson
相关产品推荐
相关产品推荐

