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 $