Синтаксическая ошибка: недопустимый арифметический оператор (токен ошибки .)

Мне нужно искать вхождения слов в текстовом файле с помощью скрипта. Сценарий, который я написал:

#!/bin/bash

if [ $# -ne 1 ]
then
        echo "inserire il file che si vuole analizzare: "
        read
        fileIn=$REPLY
else
        fileIn=$1
fi

echo "analisi di $fileIn"

for parola in $( cat $fileIn )
do
        freq=${vet[$parola]}
        vet[$parola]=$(( freq+1 ))
done

for parola in ${!vet[*]}
do
        echo $parola ${vet[$parola]}
done

unset array

Но когда я запускаю его, я получаю эту ошибку:

./script02.sh: line 16: qua.: syntax error: invalid arithmetic operator (error token is ".")

Что не так и как это исправить? Спасибо.


person shogitai    schedule 12.08.2014    source источник


Ответы (1)


При первой попытке вы не получите значение из ${vet[$parola]}. Это вызывает синтаксическую ошибку для арифметической операции Вместо этого используйте значение по умолчанию:

for parola in $(cat "$fileIn")
do
    freq=${vet[$parola]}
    [[ -z $freq ]] && freq=0
    vet[$parola]=$(( freq + 1 ))
done

Вам также может понадобиться объявить свой массив ассоциативным, если вы хотите хранить нецелочисленные ключи:

declare -A vet

for ...

Предложение:

#!/bin/bash

if [[ $# -ne 1 ]]; then
    read -p "inserire il file che si vuole analizzare: " fileIn
else
    fileIn=$1
fi

echo "analisi di $fileIn"

declare -A vet  ## If you intend to use associative arrays. Would still work in any way.

for parola in $(<"$fileIn"); do
    freq=${vet[$parola]}
    if [[ -n $freq ]]; then
        vet[$parola]=$(( freq + 1 ))
    else
        vet[$parola]=1
    fi
done

for parola in "${!vet[@]}"; do
    echo "$parola ${vet[$parola]}"
done

unset vet  ## Optional
person konsolebox    schedule 12.08.2014
comment
Великолепный! Большое спасибо за ваше предложение. :) - person shogitai; 13.08.2014