Почему expr не выполняет арифметику на действительном числе, используя сценарий оболочки?

bash на самом деле считает, что через специальную экспортированную переменную SHLVL.

$ echo "$SHLVL"
1
$ bash -c 'echo "$SHLVL"'
2

Если SHLVL равно 2, это не обязательно означает, что родительский процесс - bash, это просто означает что один из предков оболочки также является bash или другим процессом, который экспортировал SHLVL (ksh называет это тоже, я думаю).

Зачем вам нужно знать, является ли родитель вашей оболочки bash?

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

1
задан 25 March 2016 в 07:48

1 ответ

info coreutils 'expr invocation' говорит:

16.4 `expr': Evaluate expressions
=================================

`expr' evaluates an expression and writes the result on standard
output.  Each token of the expression must be a separate argument.

   Operands are either integers or strings.  Integers consist of one or
more decimal digits, with an optional leading `-'.  `expr' converts
anything appearing in an operand position to an integer or a string
depending on the operation being applied to it.

Однако вы можете использовать bc:

$ a=10.5 b=11.8 c=$(echo "scale=1;$a + $b" | bc -q );echo $c
22.3
1
ответ дан 23 May 2018 в 12:36

Другие вопросы по тегам:

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