我有一个数组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
大于b[x+1]
时,如何让a[x+1]
正确地将值1分配给数组元素a[x]
?
因此,如果数组元素a[1]
大于a[0]
,那么b[1]=1
?
提出这个问题的一种更简单的方法,那就更简单了:
如果数组元素1大于0,我怎么知道呢?
if [ "$a[1]" -gt "$a[0]" ];
then
echo element 1 greater than element 0
fi
上面的代码给出了UNEXPECTED END OF FILE,好像我缺少一些语法。有人知道这个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
arraydatafile:
1
2
1
4
5
4
2
8
root @ debian:/ home / l0l / Documents / #bash script
脚本第8行:[:2 :预期的整数表达式 脚本:第8行:[:1 :预期的整数表达式 脚本:第8行:[:4 :预期的整数表达式 脚本:第8行:[:5 :预期的整数表达式 脚本:第8行:[:4 :期望的整数表达式
任何人都知道确切的语法吗?
答案 0 :(得分:2)
我建议使用这种语法:
if [ "${a[$x+1]}" -gt "${a[$x]}" ]; then # with { and }
b[x+1]=1 # without $
答案 1 :(得分:-1)
在bash中,lt
或gt
条件需要一个整数值。如果arraydatafile
的内容不包含严格的整数,您将收到正在处理的错误。
您应该使用以下内容将arraydatafile
推送到数组中;
declare -a a;
a=($(cat arraydatafile))
在处理数组比较时,您可以使用comm
二进制文件。
例如:
$(comm -13 <(printf '%s\n' "${a[@]}"|sort -u) <(printf '%s\n' "${b[@]}"|sort -u)))
该snippit将比较数组a
&amp; b
并提供两者的交集。有关使用comm
的更多信息,请参阅手册页;即man comm
。