首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在BASH中比较数组元素?

如何在BASH中比较数组元素?
EN

Stack Overflow用户
提问于 2018-01-14 14:47:22
回答 2查看 6.3K关注 0票数 3

我有一个数组ab,我需要正确的bash语法来比较这个for循环中的数组元素:

代码语言:javascript
复制
for ((x=0;x<10;x++)); do
    if [ "$a[$x+1]" -gt "$a[$x]" ]; then
        $b[x+1]=1
    if [ "$a[$x+1]" -lt "$a[$x]" ]; then 
        $b[x+1]=0
    fi

当数组元素b[x+1]大于a[x]时,如何让bash正确地将值1赋给数组元素a[x+1]

因此,如果数组元素a[1]大于a[0],则b[1]=1

问这个问题的一种更简单的方法是:

如何让它知道数组元素1是否大于0?

代码语言:javascript
复制
 if [ "$a[1]" -gt "$a[0]" ]; 
 then
 echo element 1  greater than element 0
 fi

上面的代码给出了意想不到的文件结尾,好像我缺少了一些语法。有人知道这个BASH语法吗?

更新:脚本文件如下:

代码语言:javascript
复制
 #!/bin/bash
 declare -a a
 declare -a b
 readarray a < arraydatafile 

 for ((x=0;x<5;x++)); 
 do
 if [ "${a[$x+1]}" -gt "${a[$x]}" ]; 
 then  
 b[x+1]=1   
 fi
 done

arraydatafile:

代码语言:javascript
复制
 1
 2
 1
 4
 5
 4
 2
 8

root@debian:/home/l0l/Documents/# bash script

脚本行:[:2:整数表达式预期脚本:行8:[:1:整数表达式预期脚本:行8:[:4:整数表达式预期脚本:行8:[:5:整数表达式预期脚本:行8:[:4:整数表达式预期脚本

有人知道确切的语法吗?

EN

回答 2

Stack Overflow用户

发布于 2018-01-14 14:58:24

我建议使用以下语法:

代码语言:javascript
复制
if [ "${a[$x+1]}" -gt "${a[$x]}" ]; then  # with { and }
  b[x+1]=1                                # without $
票数 2
EN

Stack Overflow用户

发布于 2018-01-14 14:52:12

在bash中,ltgt条件需要一个整数值。如果arraydatafile的内容不包含严格的整数,您将收到正在处理的错误。

arraydatafile推送到数组时,需要使用以下代码;

declare -a a; a=($(cat arraydatafile))

在处理数组比较时,可以使用comm二进制文件。

例如:

$(comm -13 <(printf '%s\n' "${a[@]}"|sort -u) <(printf '%s\n' "${b[@]}"|sort -u)))

该代码片段将比较数组ab,并提供两者的交集。有关comm用法的更多信息,请参见手册页;即man comm

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48247304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档