【问题标题】:List specific elements of an array in bash在bash中列出数组的特定元素
【发布时间】:2019-07-02 10:57:24
【问题描述】:

我有一个类似这样的数组, 数组=( A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) 我想列出值“b、e、o、u、z” 我尝试使用:

`echo ${array[1,4,14, 20, 25]}`

[此命令无效] 输出为:B E O U Z 我不是在找

echo ${array[1] array[4] array [14]...}

获得此输出的完美命令是什么?

【问题讨论】:

    标签: arrays linux bash shell scripting


    【解决方案1】:

    我没有找到没有eval的方法:

    #! /bin/bash
    array=( A B C D E F G H I J K L M N O P Q R S T U V W X Y Z )
    x=(\${array[{1,4,14,20,25}]})
    eval echo ${x[@]}
    

    【讨论】:

    • 稍微好一点eval a=\( \"\${array[{1,4,14,20,25}]}\" \); echo "${a[@]}"
    • 我是否偶然发现了代码高尔夫挑战赛?普通的旧 printf "%s " ${array[1]} ${array[4]} ${array[14]} ${array[20]} ${array[25]} 有什么问题?
    • 否则没有 eval x=(); for i in 1 4 14 20 25; do x+=( "${array[i]}" ); done; echo "${x[@]}"
    • @MikeHolt,问题更多是关于数组切片而不是打高尔夫球,而且您似乎错过了双引号,以及如何处理任意索引列表
    • 无需使用eval 即可轻松处理任意索引列表。我不在“eval 是邪恶的,永远不要使用它”阵营(尽管关于安全性的警告并非没有价值),但在这种情况下,它似乎充其量只是为您节省了少量的打字。您自己的 for 循环示例非常简洁,并且比 eval 解决方案更清晰。使用 eval 似乎 IMO 就像是不必要的聪明。更不用说for 循环可以很好地处理任意索引列表。
    猜你喜欢
    • 2013-03-19
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2016-04-13
    相关资源
    最近更新 更多