如何使用内置的bash的test []在数组中搜索变量?

时间:2018-12-21 18:43:13

标签: linux bash

使用内置测试将我的变量与数组进行比较失败,错误为"Syntax error in expression"

我尝试使用==和-eq重新引用var_names,以及8年前SO问题中的一些老技巧。

#!/bin/bash

TOTAL=0
declare -a FREQ=(0);

main(){
    for i in $(cat "$1");
    do
        TOTAL=$(( $i + FREQ[-1] ))
        echo Total is $TOTAL

        if [[ $TOTAL -eq "${FREQ[@]}" ]];
        then
            echo "Matching Frequency Found: " $TOTAL
            exit
        else
            FREQ=(${FREQ[@]} $TOTAL)
        fi

    done

    return $TOTAL
    return $FREQ
}

main $@

我期望使用./script.sh input.txt调用包含1000个以上整数的脚本时,可以在$ FREQ数组中找到$ TOTAL。

1 个答案:

答案 0 :(得分:0)

我不确定我是否知道您要执行的操作,但是请尝试查找表。

TOTAL=0
declare -a FREQ=(0)
declare -A lookup=( [0]=1 )
while read -r i
do  TOTAL=$(( $i + FREQ[-1] ))
    if (( ${lookup[$TOTAL]} ))
    then  echo "Matching Frequency Found: " $TOTAL
          exit
    else  lookup[$TOTAL]=1
          FREQ+=($TOTAL)
    fi
done < "$1"

尽管如此,但我认为除非有一些是负数,否则它将不会达到已知的频率。