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

Arrays 如何在BASH中比较数组元素?,arrays,bash,syntax,Arrays,Bash,Syntax,我有一个数组a和b,我需要正确的bash语法来比较for循环中的数组元素: 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 上面的代码给出了意外的文件结尾,好像我缺少了一些语法。有人知道这个BASH语法吗 更新: 这是脚本文件: #!/

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

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
上面的代码给出了意外的文件结尾,好像我缺少了一些语法。有人知道这个BASH语法吗

更新: 这是脚本文件:

 #!/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
root@debian:/home/l0l/Documents/#bash脚本

脚本行8:[:2 :应为整数表达式 脚本:第8行:[:1 :应为整数表达式 脚本:第8行:[:4 :应为整数表达式 脚本:第8行:[:5 :应为整数表达式 脚本:第8行:[:4 :应为整数表达式


有人知道确切的语法吗?

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

您应该使用以下命令将
arraydatafile
推送到数组中


宣布-a;
a=($(cat arraydatafile))

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

例如:

$(comm-13我建议使用以下语法:

if [ "${a[$x+1]}" -gt "${a[$x]}" ]; then  # with { and }
  b[x+1]=1                                # without $

您的语法不正确。在赋值之前没有
'$'
,您可以使用访问数组中的值,例如
${a[$((x+1))]}
,或者在索引中没有进行添加
${a[$x]}
(或者对于索引数组
${a[x]}
)我建议添加一个
done
和一个
fi
。这可能会有帮助:虽然bash可以让您不受影响,但在添加时我总是使用算术运算符。对于索引数组,bash还允许
${a[x]}
这在尝试只读时不起作用。
echo b[x]
可以工作,但
echo b[x+1]
没有。我怎么做呢?@MoteZart:如果你使用
bash
这应该可以:
b=(x y z);echo“${b[x]}${b[x+1]}”
b[$((x+1))]=1
,并且不是通过访问的数组元素,例如
${a[$((x+1))}
?数组索引是一个算术上下文,因此你可以简单地使用
${a[x+1]>
 1
 2
 1
 4
 5
 4
 2
 8
if [ "${a[$x+1]}" -gt "${a[$x]}" ]; then  # with { and }
  b[x+1]=1                                # without $