awk
не имеет способа вычислить общее арифметическое выражение, переданное ему в виде строки. bc
, с другой стороны, берет выражение и вычисляет его, как это делает оболочка.
Если вы хотите оценить строку как математическое выражение в awk
, вам нужно либо внедрить выражение как код в программу awk
(, потенциально создающую уязвимость внедрения кода. ), или просто напишите свой собственный синтаксический анализатор для типов выражений, которые вы хотите оценить (это обычное домашнее задание по информатике ).
Вы получаете 12
из кода awk
, потому что значение expression_to_evaluate
при преобразовании в целое число может быть преобразовано до символа пробела в строке. Вот как работает библиотечная функция strtol()
C, когда она преобразует строку в целое число, и awk
, вероятно, использует это под капотом.
Я могу выполнить задачу с помощью ниже
printf '%s\n' '/caCertificates :{}/r RE -ca.crt' 1 '/caCertificates :{}/d' w | ed values.yaml