LINUX.ORG.RU

Почему работает доступ к значению без $ в условном выражении?

 , ,


1

2

Сейчас наткнулся вот на такую особенность:

#!/bin/bash

regExpLen="1"

if [[ regExpLen -eq 1 ]]; then
  echo "Равно 1"
fi

Вопрос: почему в условии можно не писать $regExpLen, почему работает просто имя переменной?

★★★★★

Потому что [[ — это волшебный башесинтаксис, в отличии от [, который по POSIX и просто команда.

anonymous
()
Ответ на: комментарий от anonymous

Предположим, что есть переменная с именем ip.

Как bash разберет, что нужно брать значение переменной ip, а не вызывать утилиту ip?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Внутри [[ он тебе всё равно ничего сам по себе не вызовет. Там может быть либо переменная, либо литерал, и выглядит так, что для численных сравнений, в случае если с одной стороны строка, то это автоматически воспринимается как имя переменной. Ну, так как строковый литерал численно с числом всё равно не получится сравнить.

anonymous
()

По-моему, в баше логику искать бессмысленно.

anonymous
()
Ответ на: комментарий от anonymous

Я ничего не понял. Видимо каких-то запятых и пары слов, которые части речи связывают, не хватает.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Там может быть либо переменная, либо литерал

Там вообще может быть любое арифметическое выражение

$ x=1; [[ x+1 -eq 2 ]] && echo Ok
Ok
$ [[ ++x -eq 2 ]] && echo Ok
Ok
vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.