2015-03-27 6 views
0

В следующем коде возникает проблема при инкапсуляции блока кода с помощью функции. Сообщение об ошибке $1: ambigious redirect" is displayed.bash shell script error: ambigious redirect

Цикл while считывает текст из файла input.txt построчно и сохраняет его в массиве linesArray.

Цикл for в цикле «while» выполняет итерацию по всем элементам массива linesArray с индексом 0, а затем выполняет оператор case, который сравнивает элементы массива с действительными операторами mips.

function mnemonicCheck { 
    while read line; do 
    linesArray=($line) 
    for e in ${linesArray[0]} 
    do 
     case $e in 
     "add") 
     ;; 
     "sub") 
     ;; 
     "addi") 
     ;; 
     "lw") 
     ;; 
     "sw") 
     ;; 
     *) 
     echo "invalid operator used. Valid operators are: add,sub,addi,lw,sw" 
     ;; 
     esac 
    done 
    done < $1 
} 

#calling methods 
checkArguments $1 $2 $3 
mnemonicCheck 

ответ

1

Вы называете mnemonicCheck без каких-либо аргументов, поэтому внутри функции $1 пустая строка.

Что бы вы тогда ожидать

< $1 

означать? (Я согласен, что «двусмысленный» - это странное слово для использования в этом контексте, но оно не совсем неверно, так как нельзя точно сказать, что имеется в виду.)

+0

$ 1 относится к аргументу для цикла while, который читает текст файла. – user2037720

+0

@ user2037720: Нет, это не так. Цикл while не имеет аргументов. $ 1 всегда означает первый аргумент функции/скрипта. – rici

+0

@ user2037720: Если вы имели в виду, что '$ 1' используется для перенаправления stdin для цикла while, вы были бы правы. Но откуда он получает ценность? – rici