2 quick dquote> 3 brown" | while read -a D; do echo "${D[1]}--${D[0]}"; d-6ren">
gpt4 book ai didi

arrays - 为什么 zsh 中 read -a 失败

转载 作者:行者123 更新时间:2023-12-03 02:54:51 25 4
gpt4 key购买 nike

如果我输入:

echo "1 the
dquote> 2 quick
dquote> 3 brown" | while read -a D; do echo "${D[1]}--${D[0]}"; done

在 bash 中它说:

the--1
quick--2
brown--3

但在 zsh 中它说:

zsh: bad option: -a
为什么?我该怎么办?

最佳答案

在两个 shell 中 read是一个内置的。它们具有相同的目的,但实现和选项不同。

为了读入 zsh 中的数组, read需要选项-A (而不是 -a ):

echo "1 the
2 quick
3 brown" | while read -A D; do echo $D[2]--$D[1]; done
<小时/>

注意: zsh 之间还有更多差异和bash :

  • zsh数组默认从 1 开始编号,如 bash他们从零开始。
  • echo $ARRAY prints 输出 zsh 中的所有元素但只有 bash 中的第一个元素
  • 打印 sh 中数组的第三个元素您可以使用echo $ARRAY[3] 。在 bash需要用大括号来分隔下标,第三个元素的下标也是 2 :echo ${ARRAY[2]} .
  • zsh通常不需要引用参数扩展来正确处理带有空格的值。例如

    FILENAME="no such file"
    cat $FILENAME

    将仅在 zsh 中打印一条错误消息:

    cat: 'no such file': No such file or directory

    bash 中有三个错误消息:

    cat: no: No such file or directory
    cat: such: No such file or directory
    cat: file: No such file or directory
  • zsh内置echo默认情况下评估转义码。在 bash您需要通过 -e对此的论据。

    echo 'foo\tbar'

    zsh :

    foo     bar

    bash :

    foo\tbar

一般来说,重要的是要记住,而 zshbash相似,但远非相同。

关于arrays - 为什么 zsh 中 read -a 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36453146/

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