gpt4 book ai didi

zsh - 为什么此代码在传递给 `zsh -n` 而不是传递给 `zsh` 时抛出错误?

转载 作者:行者123 更新时间:2023-12-04 19:35:28 27 4
gpt4 key购买 nike

在此示例中,我尝试将所有值从一个关联数组复制到另一个关联数组。我正在使用 zsh -n 检查我的代码是否存在语法错误,但是这个会抛出一个 test:12: bar: assignment to invalid subscript range

#!/usr/bin/env zsh
typeset -A foo bar
foo=(
Adama "Commander"
Tigh "Executive Officer"
Roslin "President"
)
bar=()

for i in ${(k)foo}; do
# "rubbish"
bar[$i]=$foo[$i]
done

如果我取消注释 # "rubbish 行,zsh -n 停止提示。我的代码或 zsh -n 有问题吗> ?

最佳答案

你可以通过添加 Debug模式(-x)来查看发生了什么

由于 non_exec 模式 (-n) 不执行任何操作,它不执行 typeset 所以 bar 不是一个“关联数组”,赋值无效。

我看到“垃圾”行(或其他看起来像命令的行)的存在阻止程序进入“for”循环。

Zsh mailing list: zsh -n doesn't grok associate array indexes? (2011 年 1 月)

我尝试使用 zsh 4.3.12 并且行为更加一致,使用 -n 程序永远不会进入“for”循环。

对于没有循环的小程序:

#!/usr/bin/env zsh
typeset -A bar
bar[test]=testons
echo $bar

zsh 4.3.10 和 4.3.12 都将以相同的方式执行程序,但是zsh-4.3.10 -n 时会报错(assignment to invalid subscript range)zsh-4.3.12 -n 不会。

作为结论,使用 zsh 4.3.12(或更新版本,我发现 ZSH 5 可用)
News about zsh (包括 1997 年的“新闻”!)

关于zsh - 为什么此代码在传递给 `zsh -n` 而不是传递给 `zsh` 时抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13409807/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com