С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
 
pcmax
16 / 16 / 2
Регистрация: 29.01.2018
Сообщений: 443
1

Bash: когда используются круглые, а когда - квадратные скобки?

10.03.2018, 21:42. Просмотров 498. Ответов 21
Метки нет (Все метки)

привет всем
помогите разобраться
не могу понять использование круглыс скобок и квадратных в bash.
да , уже гуглил, и если бы понял, то не беспокоил бы ВАс с Вашими важными делами.
гугл выдает, что круглые скобки для сравнения арифметических действий, а квадратные для сравнения строк. ок, тогда почем так?
Bash
1
2
3
4
while (1=1)
do
echo `sensors`
done
это не работает.
а вот так
Bash
1
2
3
4
5
#! /bin/bash
while [1=1]
do
echo `sensors`
done
работает.
квадратные скобки же для сравнения строк , а я сравниваю числа
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2018, 21:42
Ответы с готовыми решениями:

Фигурные или круглые скобки безопаснее и в каких случаях ?
ext=${file##*.} В интернете так же написано, что фигурные скобки {} безопаснее...

Что означают квадратные скобки
Добрый день. Может не в той теме вопрос. Есть квадратные скобки . Как это...

Управление загрузочным сектором когда несколько ОС
Всем привет. Пытаюсь настроить камп, чтобы паралельно были установлены винда и...

Как перезагружать apache, когда остаётся мало свободной памяти?
Привет, ребята! Такая ситуация. Есть на VPS несколько сайтов и одно...

Как отключить (системный?) звук "БИП", когда курсор доходит до конца строки?
Например, когда открываешь терминал, вводишь логин и пароль, а потом начинаешь...

21
Marinero
Модератор
Эксперт NIX
2143 / 1723 / 587
Регистрация: 02.03.2015
Сообщений: 5,635
10.03.2018, 23:43 2
Не будет работать никак. Квадратная скобка синоним команды test и между командой и аргументами должен быть пробел. Арифметическое действие - это двойные круглые скобки, которые в новых версиях bash могут быть заменены на 1 квадратную. А в общем
Bash
1
man bash
в помощь
1
nezabudka
735 / 299 / 117
Регистрация: 28.06.2015
Сообщений: 767
Записей в блоге: 13
11.03.2018, 16:49 3
Вот так будет работать
Bash
1
while ((1))
или
Bash
1
while [ 1 ]
знак равенства ==
или
-eq
1
pcmax
16 / 16 / 2
Регистрация: 29.01.2018
Сообщений: 443
11.03.2018, 17:55  [ТС] 4
не доходит. я бы мог еще понять, что еденица -это true. но когда в скобки я прописываю ноль и цикл работает, то как то я теряюсь.
как вообще воспринимает скобки? можете объяснить, а то что то я туплю
0
nezabudka
735 / 299 / 117
Регистрация: 28.06.2015
Сообщений: 767
Записей в блоге: 13
11.03.2018, 18:17 5
Bash
1
while (( 0 ))
Не будет работать
Bash
1
2
f=
while [ $f ]
Не будет работать потому, что переменная не определена
Но если ее пределить даже нулем то test возвращает true
1
pcmax
16 / 16 / 2
Регистрация: 29.01.2018
Сообщений: 443
11.03.2018, 18:58  [ТС] 6
ок.
если я хочу написать цикл, который будет выполнятся до тех пор пока
Bash
1
2
3
4
5
6
7
#!/bin/bash/
s=1
while  10>s
do
echo "hi"
s=$((s+1))
done
какие я скобки должен поставить?
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26525 / 17814 / 7048
Регистрация: 22.10.2011
Сообщений: 31,361
Записей в блоге: 6
11.03.2018, 19:07 7
Квадратные:
Bash
1
while [ $s -lt 10 ]
1
pcmax
16 / 16 / 2
Регистрация: 29.01.2018
Сообщений: 443
11.03.2018, 19:08  [ТС] 8
почему?
0
nezabudka
735 / 299 / 117
Регистрация: 28.06.2015
Сообщений: 767
Записей в блоге: 13
11.03.2018, 19:17 9
pcmax,
Bash
1
for((i=0; i < 10; i++)); do echo hi; done
Добавлено через 5 минут
Bash
1
2
3
4
5
6
7
#!/usr/bin/env bash
s=0
while [ $s -lt 10 ]
do
echo "hi"
((s++))
done
Добавлено через 2 минуты
Bash
1
2
3
4
5
6
7
#!/usr/bin/env bash
s=1
while [[ $s != 10 ]]
do
echo "hi"
((s++))
done
1
pcmax
16 / 16 / 2
Регистрация: 29.01.2018
Сообщений: 443
11.03.2018, 19:20  [ТС] 10
я хочу понять почему квадратные скобки...
почему не круглые?
0
nezabudka
735 / 299 / 117
Регистрация: 28.06.2015
Сообщений: 767
Записей в блоге: 13
11.03.2018, 19:56 11
pcmax, Потому, что квадратные скобки это синоним команды test
Набери в терминале
Bash
1
man test
Добавлено через 6 минут
Bash
1
2
3
4
5
6
7
#!/usr/bin/env bash
s=0
while test $s -lt 10
do
echo "hi"
((s++))
done
1
pcmax
16 / 16 / 2
Регистрация: 29.01.2018
Сообщений: 443
11.03.2018, 19:59  [ТС] 12
ладно, тут что -то или со мной или с bash. нахожу из учебника готовый код, забиваю, и он выдает ошибку. пишу выдуманный код-скрипт и все работает без ошибок.

Добавлено через 54 секунды
ошибку выдает, из того что вы написали.... хотя я понимаю, что с точки синтаксиса Вы все правильно написали
0
nezabudka
735 / 299 / 117
Регистрация: 28.06.2015
Сообщений: 767
Записей в блоге: 13
11.03.2018, 20:08 13
pcmax, Строку ошибки в студию! )))
0
pcmax
16 / 16 / 2
Регистрация: 29.01.2018
Сообщений: 443
11.03.2018, 20:50  [ТС] 14
как сюда загрузить файл с выводом ошибки?
0
Marinero
Модератор
Эксперт NIX
2143 / 1723 / 587
Регистрация: 02.03.2015
Сообщений: 5,635
11.03.2018, 20:52 15
pcmax, Зачем файл? Текст выделить и вставить
0
pcmax
16 / 16 / 2
Регистрация: 29.01.2018
Сообщений: 443
11.03.2018, 20:52  [ТС] 16
Syntax error: Bad for loop variable
в этом духе
0
Marinero
Модератор
Эксперт NIX
2143 / 1723 / 587
Регистрация: 02.03.2015
Сообщений: 5,635
11.03.2018, 21:14 17
pcmax, А код какой? for не было вроде...
1
pcmax
16 / 16 / 2
Регистрация: 29.01.2018
Сообщений: 443
11.03.2018, 21:59  [ТС] 18
был. выше написанно
я все циклы мучил в bash
for работает только так
Bash
1
2
3
4
5
for d in 1 2 3 4 5 6 
do 
 
 
done
в стиле c++
выдает ошибку.
и вообще мой bash как то странно воспринимает скобки
0
Marinero
Модератор
Эксперт NIX
2143 / 1723 / 587
Регистрация: 02.03.2015
Сообщений: 5,635
12.03.2018, 11:57 19
Что-то не так делаете. Все работает
Код
>> for ((i=1;i<10;i++)); do echo -n $i\  ; done ; echo
1 2 3 4 5 6 7 8 9
Ну покажите версию вашего
Bash
1
bash --version
1
pcmax
16 / 16 / 2
Регистрация: 29.01.2018
Сообщений: 443
12.03.2018, 19:43  [ТС] 20
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
да я уже рабята всяко пробовал

Добавлено через 2 минуты
я в нано пишу..... file.sh
потом запускаю sh file.sh

Добавлено через 3 часа 19 минут
в терминале работает, в скрипте нет. почему?
0
12.03.2018, 19:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2018, 19:43

Когда нужно ставить скобки для функций, а когда нет
&lt;!DOCTYPE html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;UTF-8&quot;&gt; ...

Круглые и квадратные скобки при операторе new
Требуются помощь в использовании оператора new! И так для начала вопросы для...

Определить, корректно ли расставлены круглые, фигурные и квадратные скобки
Вот такая вот нехитрая вроде бы задача: Для введённой пользователем с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru