我有一个数组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当数组元素b[x+1]大于a[x]时,如何让bash正确地将值1赋给数组元素a[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上面的代码给出了意想不到的文件结尾,好像我缺少了一些语法。有人知道这个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
donearraydatafile:
1
2
1
4
5
4
2
8root@debian:/home/l0l/Documents/# bash script
脚本行:[:2:整数表达式预期脚本:行8:[:1:整数表达式预期脚本:行8:[:4:整数表达式预期脚本:行8:[:5:整数表达式预期脚本:行8:[:4:整数表达式预期脚本
有人知道确切的语法吗?
发布于 2018-01-14 14:58:24
我建议使用以下语法:
if [ "${a[$x+1]}" -gt "${a[$x]}" ]; then # with { and }
b[x+1]=1 # without $发布于 2018-01-14 14:52:12
在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)))
该代码片段将比较数组a和b,并提供两者的交集。有关comm用法的更多信息,请参见手册页;即man comm。
https://stackoverflow.com/questions/48247304
复制相似问题