【发布时间】:2018-01-14 06:47:21
【问题描述】:
我有一个数组 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
当数组元素a[x+1] 大于a[x] 时,如何让bash 正确地将值1 分配给数组元素b[x+1]?
那么如果数组元素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
数组数据文件:
1
2
1
4
5
4
2
8
root@debian:/home/l0l/Documents/# bash 脚本
脚本第 8 行:[:2 : 需要整数表达式 脚本:第 8 行:[:1 : 需要整数表达式 脚本:第 8 行:[:4 : 需要整数表达式 脚本:第 8 行:[:5 : 需要整数表达式 脚本:第 8 行:[:4 : 需要整数表达式
有人知道确切的语法吗?
【问题讨论】:
-
您的语法不正确。 assignments 之前没有
'$',您可以使用例如访问数组中的值${a[$((x+1))]}或在索引上没有添加的地方${a[$x]}(或索引数组${a[x]}) -
我建议添加一个
done和一个fi。 -
这可能会有所帮助:How to debug a bash script?