zsh - 在 zsh 中,如何将匿名数组传递给函数?

标签 zsh

在 zsh 中,如何将匿名数组传递给函数?例如寻找类似的东西:

foo() {
  echo ${1[2]} '\n';
}

a=(abc def ghi)
foo $a

--> def

或者理想情况下:
foo (abc def ghi)

最佳答案

您可以将数组的名称传递给函数,然后函数可以通过将名称解释为变量名来读取数组。这种技术对于 bash 中的关联数组等内容也很有用。 ZSH 使它变得非常容易,因为 (P) 运算符将以所需的方式解释变量。

一个例子将说明这一点。如果你定义这个函数:

function i_want_array () {
    local array_name=$1

    echo "first array element is: " ${(P)${array_name}[1]}
}

然后下面的代码将执行它:
% a=(one two three)
% i_want_array "a"
first array element is:  one

只是为了澄清,这是通过对真实数组进行操作来工作的,因此可以正确处理任何空格:
% a=("one two" three)
% i_want_array "a"
first array element is:  one two

关于zsh - 在 zsh 中,如何将匿名数组传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/442012/

相关文章:

macos - 为什么在 iTerm2 中 OSX 上的 emacs 看不到 C-S-<up>?

c - 带有一个参数的 zsh 导出似乎并没有实际创建环境变量

git - 即时更改 Git 用户

linux - Ubuntu Zsh(通过 Vagrant)没有找到 Zsh 或其功能

bash - ZSH 在 linux bash 中的 "compadd' 等价物是什么?

macos - 如何将 Brew 添加到路径、Ventura 上的 Fish

zsh 编译 : insecure directories

visual-studio-code - zsh 通过 Cygwin 无法在 vscode 终端上运行

zsh:命令替换和正确引用

autocomplete - zsh 自动补全似乎仅适用于内置命令