Страницы

Поиск по вопросам

воскресенье, 2 февраля 2020 г.

Арифметика в bash

#linux #bash


Делаю простой калькулятор на bash:

#!/bin/bash

while [ 1 -eq 1 ]
do
    read arg1 op arg2
    if [[ "$arg1" -eq "exit" ]]
    then    
        break
    fi

    flag=0
    for ops in + - * / % **
    do
        if [[ "$op" = "$ops" ]]
        then
            flag=1
        fi  
    done 

    if [[ $flag = 1 ]]
    then
        let "result = $arg1 $op $arg2"
        echo "$result"
    else
        echo "error"
    fi


done

echo "bye"


Смысл в том, что на вход я подаю 3 значения, аргументы и операция между ними. Например,
12 + 5.

Все хорошо работает, кроме операций * и **.

В чем может быть дело?
    


Ответы

Ответ 1



for ops in + - * / % ** заключите по крайней мере * и ** в кавычки. а лучше — все аргументы: for ops in '+' '-' '*' '/' '%' '**' тогда оболчка не будет пытаться делать какие-либо подстановки.

Ответ 2



Или можно поставить экранирование for ops in + - * / % ** вот так for ops in + - \* / % \*\*

Комментариев нет:

Отправить комментарий