Рейтинг:2

Вычислить строку ```$((выражение))```-подобно и сохранить в переменной

флаг in

Для некоторых из вас это будет звучать довольно неловко. Предположим, у меня есть строка, представляющая некоторые $((выражение)), арифметическое выражение математическое как '$((1+1))'. Я хочу выполнить это и доставить результат в переменную.

Пример:

$ выражение = '$ ((5 + 5))'
$ эхо $ выражение 
'$((5+5))'

$ # Ожидаемый результат: 10

Как я могу оценить эту строку и сохранить ее результат?

Bruno Henrique Peixoto avatar
флаг in
О, я могу приготовить отличную пасту со всеми этими макаронными ошибками, спасибо!
Рейтинг:1
флаг jp

Если вы оцениваете строку, попробуйте оценка.

стр = "$ [ 5 + 5 ]"
eval "numb=$str" # Превращается в `numb=$[ 5 + 5 ]`
echo $numb # Выводит 10

оценка может выполнять строки, как если бы они были шелл-кодом. Будь осторожен! Если $ул может содержать специальные символы, это может нарушить ваш сценарий или даже создать дыру в безопасности.

Рейтинг:0
флаг sd

Просто сохраните его в переменной, как обычно.

$результат=$((5+5))
$ эхо $ результат 
10

Если это не то, что вы имели в виду, редактировать свой пост и разместить дополнительную информацию.

Bruno Henrique Peixoto avatar
флаг in
Я обновил вопрос для лучшего понимания моего дела. Но я ценю ответы, софер! :-)
флаг jp
Dan
@BrunoHenriquePeixoto В своем редактировании вы использовали почти тот же код. Этот ответ именно то, что вы хотите в этом случае. Единственная ошибка, которая у вас есть, заключается в том, что вы используете кавычки в части `$((5+5))`, вам нужно удалить это.
Bruno Henrique Peixoto avatar
флаг in
Что ж, операция, которую мне нужно оценить, имеет кавычки. Тогда, боюсь, я не могу их оценить.
Рейтинг:0
флаг cn

Если это на самом деле математический, особенно если он включает простую целочисленную арифметику, вы можете использовать именно тот формат, который у вас есть:

$ вар = $ ((1 + 1))
$ эхо "$вар"
2

То же самое, если это команда. Например, можно выполнить несколько более сложную математику, подключив конвейер к До нашей эры:

## простая математика с целыми числами работает
$ эхо $ ((3 * 2))
6
## дроби не работают
$ эхо $ ((1,3 * 2))
bash: 1.3 * 2: синтаксическая ошибка: неверный арифметический оператор (маркер ошибки ".3 * 2")
## до н.э. работает
$ эхо "1,3 * 2" | До нашей эры
2,6

Итак, чтобы сохранить это в переменной, вы просто используете стандартный подстановка команды:

$ var=$(эхо "1.3 * 2" | до н.э.)
$ эхо "$вар"
2,6

Наконец, у вас также есть оценка встроенный (см. помогите оценить в бить):

$ помочь оценить
eval: eval [аргумент ...]
    Выполнять аргументы как команду оболочки.
    
    Объедините ARG в одну строку, используйте результат в качестве входных данных для оболочки,
    и выполнить полученные команды.
    
    Статус выхода:
    Возвращает статус выхода команды или успех, если команда имеет значение null.

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

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.