gpt4 book ai didi

arrays - 我尝试获取数组的长度有什么问题?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:30 24 4
gpt4 key购买 nike

一个脚本有以下内容:

#/bin/bash
path_elements=$(echo $PATH | tr ":" " ")
echo ${#path_elements[*]}

我的 PATH 变量包含几个目录。但是,运行时,输出返回:

1

为什么这不返回 $PATH 中的目录数?需要什么来解决这个问题?

最佳答案

您只是读入单个字符串,其中空格代替冒号(文字制表符替换为空格,扩展的 glob 表达式,以及您可能不想要的各种其他行为);因此,当您询问数组 path_elements 中存在多少个字符串时,您会得到答案 1,因为只有一个字符串(根本不是数组)。


现在,this 是一个数组,也是读取它的最佳实践方法:

# This is the best-practices approach.
IFS=: read -r -a path_elements <<<"$PATH"
echo "${#path_elements[@]}"

...这是一种不正确的、错误的读入数组的方法(它至少创建了一个数组——但没有正确处理带空格的目录名,错误地扩展了 glob,并导致一堆问题):

# This is a buggy antipattern that does, at least, create an array
path_elements=( $(tr ':' ' ' <<<"$PATH") )
echo "${#path_elements[@]}"

参见 BashFAQ #5有关正确使用数组的更多信息。

关于arrays - 我尝试获取数组的长度有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30380903/

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