Ubuntu не вычисляет выражения в [..]?

Я новичок в Linux. Я читаю книгу Linux: Rute Users. Все хорошо, пока я не дойду до модуля 7.1.

Мой сценарий такой же следуйте:

#!/bin/sh
echo "enter X"
read X
echo "enter Y"
read Y
echo "X*Y = $X*$Y = $[X*Y] = $[$X*$Y]"

Мой терминал не выдает мне X * Y = 2 * 3 = 6, вместо этого он печатает

X*Y = 2*3 = $[X*Y] = $[2*3]

Я также попробовал команду в терминале напрямую:

echo "$[2*3]"

, и он вернул мне 6.

В чем проблема с моим скриптом? Я использую 32-разрядную версию Ubuntu Desktop 12.04 LTS. Спасибо!

3
задан 20 February 2014 в 16:48

1 ответ

Условное выражение ((...)) оценивает арифметическое выражение так, как оно было написано на «нормальном» алгоритмическом языке (вы даже можете опускать знаки доллара из переменных) и устанавливает состояние выхода равным 1, если выражение оценивается в 0 или в 0, если выражение оценивается в ненулевое значение.

В bash версии 3.2 и выше вы можете (и должны) использовать $ (())

Цитата из this

Что такое bash?

Происходящий от Bourne Shell, Bash является продуктом GNU, «Bourne Again SHell». Это стандартный интерфейс командной строки на большинстве машин Linux. Отличается интерактивностью, поддерживает редактирование, завершение и вызов командной строки. Он также поддерживает настраиваемые приглашения - большинство людей понимают это, но не знают, сколько можно сделать.

Вы должны использовать (( )) для математических выражений:

echo "$(( 2*3 ))"

или

echo "$(( $X*$Y ))"

или даже

echo "$(( X*Y ))"
<час>

Почему echo $[..] также работает в некоторой среде?

Арифметическое расширение

Арифметическое расширение позволяет оценить арифметическое выражение и подмена результата. Формат для арифметического расширения:

$ ((выражение))

Старый формат $ [выражение] устарел и будет удален в следующих версиях bash.

0
ответ дан 20 February 2014 в 16:48

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

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