use*_*944 5 arrays syntax 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
Run Code Online (Sandbox Code Playgroud)
当数组元素大于时,如何bash正确地将值 1 分配给数组元素?b[x+1]a[x+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
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了意外的文件结尾,就好像我缺少一些语法一样。有人知道这个 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
Run Code Online (Sandbox Code Playgroud)
数组数据文件:
1
2
1
4
5
4
2
8
Run Code Online (Sandbox Code Playgroud)
root@debian:/home/l0l/Documents/# bash 脚本
脚本第 8 行: [: 2 : 预期整数表达式 脚本: 第 8 行: [: 1 : 预期整数表达式 脚本: 第 8 行: [: 4 : 预期整数表达式 脚本: 第 8 行: [: 5 : 预期整数表达式 脚本: 行8: [: 4 : 需要整数表达式
有人知道确切的语法吗?
jas*_*as- -1
在 bash 中,ltorgt条件需要一个整数值。如果 的内容arraydatafile不严格包含整数,您将收到正在处理的错误。
您应该使用以下命令将其推arraydatafile入数组;
declare -a a;
a=($(cat arraydatafile))
在处理数组比较时,可以使用comm二进制文件。
例如:
$(comm -13 <(printf '%s\n' "${a[@]}"|sort -u) <(printf '%s\n' "${b[@]}"|sort -u)))
该片段将比较数组a&b并提供两者的交集。有关使用的更多信息,comm请参阅手册页;IE man comm。