2016-02-15 3 views
0

Я создаю программу, которая должна сравнивать вход пользователя со строками из файла.Linux Bash Shell Script -p недействительный идентификатор

Вход: ./script Questions.txt Answers.txt

Вот моя программа:

#!/bin/bash 
declare -a existing_answ 
i=0 
j=0 
Number_of_correct_answers=0 
Number_of_wrong_answers=0 
while IFS='' read -r line || [[ -n "$line" ]] 
do 
    existing_answ[$i]="$line" 
    let "i=i+1" 
done < "$2" 

while IFS='' read -r line || [[ -n "$line" ]] 
do 
    echo "$line" 
    while [ -z "$arg1" ] 
    do 
      read –p "Your answer: " arg1 
    done 


    if [[ ${existing_answ[$j]} == "$arg1" ]] 
    then 
      let "Number_of_correct_answers++" 
    else 
      let "Number_of_wrong_answers++" 
    fi 
    let "j=j+1" 
done < "$1" 
echo "$Number_of_correct_answers" 
echo "$Number_of_wrong_answers" 

Что получает бесконечный цикл о том, что -p is not a valid identifier Того же сценарий для пользовательского ввода работал в моих предыдущих программах, здесь это Безразлично» т. Я пропустил что-то или что с ним не так?

+0

Учитывая «сравнить пользовательский ввод с файлом», почему бы не просто «если grep» $ 2 «$ 1; затем эхо Найди его; иначе эхо «нет»; fi' Удачи – shellter

+1

Похоже, вы используете его с 'sh' вместо' bash'. – tripleee

+3

'read -p' символ перед' p' не является простым тире. Удалите эту строку и повторно введите ее (и никогда не используйте прикольный текстовый процессор или скопируйте/вставьте материал из веб-страниц). Это ENDASH \ u2013. – Mat

ответ

4

Проблема заключается в том, что вместо символа дефиса минус ASCII в -p символ до p является typographic en-dash. Вы должны заменить это стандартным дефис-символом ASCII.

Смежные вопросы