Почему является этот OSX/BSD/GNU sed обходным решением, не работающим

Никакая потребность в bash, плоскость sh сделает также:

#! /bin/sh - 
IFS=+; echo "$(($*))"

$* в оболочках POSIX, расширяется до списка позиционных параметров (в этом случае, аргументы сценарию) разделенный первым символом $IFS (или пространство, если $IFS сброшен или ничто если $IFS пусто). $((...)) оболочка внутренний арифметический оператор расширения (обратите внимание, что это поддерживает десятичные, восьмеричные и шестнадцатеричные числа),

Если Вам нужна поддержка с плавающей точкой, это - то, где Вам будет нужна другая оболочка как ksh93 или zsh (нет bash как bash только целочисленная арифметика поддержек), хотя Вы могли также использовать awk:

#! /usr/bin/awk -f
BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}

Это будет использовать long (для целого числа) и double (для плавающей точки), вводят числа, как реализовано Вашей системой. Входные числа должны быть десятичной или инженерной записью с плавающей точкой в английском стиле (разделитель с плавающей точкой является символом точки независимо от локали). С некоторыми awk реализации, это перестанет работать, если первое число будет отрицательно как awk попытался бы интерпретировать его как опцию.

Некоторые awk реализации как GNU awk когда POSIXLY_CORRECT находится в среде, также поддерживают hexadecimals включая с нотациями двоичного порядка. Или с --non-decimal-data, это понимает octals и hexadecimals:

$ POSIXLY_CORRECT=1 ./sum  0xap3 0xa
90 # (0xa * 2^3) + 0xa
$ awk --non-decimal-data -f ./sum  010
8
3
08.04.2014, 23:51
2 ответа
[1129264] Когда вы расширяете переменную [1129590]sedi[1129591], происходит то, что [1129592]''[1129593] передается в качестве аргумента в [1129594]sed[1129595], вместо того, чтобы создавать пустой аргумент, как и ожидалось.

Лучший способ, который я могу увидеть вокруг этого, это сделать вашу [1129596]sedi[1129597] переменную массивом:

  • И использовать вот так:
  • В противном случае, я думаю, что единственный способ превратить ваш [1129598]''[1129599] в фактический пустой аргумент - это использовать [1129600]eval[1129601] с вашим оригинальным объявлением:
  • Однако это несколько неприятное решение, так как вам нужно добавить дополнительный слой кавычек/кавычек к остальной части команды. Также, как правило, рекомендуется (и безопасно) избегать использования [1129602]eval[1129603] там, где это возможно.
Обновление

Как прокомментировано ниже, создание функции будет работать. На этом же пути псевдоним [1129604]-[1129605], вероятно, самый короткий метод:

Сделать использование просто:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\0BC19BFC9D71BE44FB2B3570BAE7D7CD
1
27.01.2020, 21:28
[1130279]Определите функцию оболочки, которая обёртывает [1130658]sed[1130659] вместо:

1
27.01.2020, 21:28

Теги

Похожие вопросы