LINUX.ORG.RU

Пункт 5 лучше не писать вообще - какой смысл сравнивать одну переменную, а инкрементировать другую? Вечный цикл пишется while :; do true; done

tailgunner ★★★★★
()

1. dir=$(pwd) без пробеловх
2. [[ -f myfile ]]
3. строка != число
4. хрень какая-то
5. я б так: for i in {1..10}

Deleted
()

1. mydir = `pwd` | mydir = $(pwd)

mydir="${PWD}"

2. [ -f myfile ] | test -f myfile

Я бы использовал первый вариант.

3. n1 -eq n2 | n1 = n2

Если сравниваешь числа — первое, если строки — второе.

4. n1 != n2 | n1 != n2

Шта? Ты хотел сказать -ne? То же самое, что и 3.

5. for var in 1 .. 10 do var++ done | for (( var = 1; var < 10; a++))

Ну тут уж совсем дичь, особенно во втором варианте. Используй while и разберись с переменными (или не пей, пока пишешь пост на ЛОР).

r3lgar ★★★★★
()

1. mydir = `pwd` | mydir = $(pwd)

mydir = "$( pwd )"
Потому что наглядней, и можно делать вложенности вида $( ... $( ... ) ... )
Кавычки, ЕМНИП, не нужны, но это очень хороший рефлекс в bash: почаще ставить кавычки.
Пробелы - на вкус и цвет; мне так наглядней, особенно когда команда длинная.

2. [ -f myfile ] | test -f myfile

[[ -f myfile ]]
https://stackoverflow.com/questions/3427872/whats-the-difference-between-and-...

3. n1 -eq n2 | n1 = n2

Если сравниваешь числа, используешь -eq, если строки, то =

4. n1 -ne n2 | n1 != n2

См. предыдущее

5. for var in 1 .. 10 do var++ done | for (( var = 1; var < 10; a++))

Во-первых, в первой части забыты точки с запятой.
Во-вторых, дело привычки, но я предпочитаю for (( var = 1; var < 10; a++)), ибо наглядней, более гибкий, и любой программер поймет быстрее по сравнению с 1..10

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от r3lgar

1. mydir = `pwd` | mydir = $(pwd)

mydir=«${PWD}»

Подозреваю, что ТС интересуется не тем, как добыть имя текущей директории ;)

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

Во-первых, в первой части забыты точки с запятой.

Во-первых, эти два for-а совсем разные. Даже если правильно написать ((var++)) вместо var++, то это ничего не поменяет, так как следующая итерация в for var in s1 s2 ...; do просто перепишет var=s2 вне зависимости от ваших ++

И во-вторых, for((C-style)) — весьма молодой башизм, привычки у них...

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

Разные, да, но понятно же что человек хотел.

И хватит считать башизм чем-то плохим. Пора уже выходить из каменного века.

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

Разные, да, но понятно же что человек хотел.

Хотеть - одно, а понимать - другое. Это же не отвлеченное рассуждение, а конкретный ответ на вопрос — данные циклы совсем не эквиваленты и потому «что лучше» тут не катит.

И хватит считать башизм чем-то плохим.

Пф. В отличии от некоторых, я знаю что и где и когда. Видели теги в топике? Вот я на это и ответил.

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

Пробелы до/после = не ставятся, я про них.

Это да.
P. S. Точно на мой коммент ответ?

Kroz ★★★★★
()

Поздравляю, он вас всех затралел.

ashot ★★★★
()

Ты либо используешь башизмы, либо не используешь башизмы. В чём вопрос-то?

bodqhrohro_promo
()

mydir = `pwd` | mydir = $(pwd)

Предпочтительнее считается $( ... ), потому что его можно вкладывать друг в друга. Обращаю внимание, что это не башизм, как многие думают (т. е. такая конструкция POSIX sh-совместима).

[ -f myfile ] | test -f myfile

Если bash, то [[ -f myfile ]]. Если POSIX sh, то не важно, обе формы эквивалентны.

n1 -eq n2 | n1 = n2
n1 -ne n2 | n1 != n2

Надо полагать, подразумевается писать это внутри test или [ ... ]? Тогда это разные вещи: -eq и -ne для целых чисел, = и != для строк. И это всё POSIX sh.

В bash для чисел идиоматично писать (( n1 == n2 )) и (( n1 != n2 )), для строк [[ n1 == n2 ]] и [[ n1 != n2 ]].

for var in 1 .. 10 do var++ done | for (( var = 1; var < 10; a++))

Первый синтаксис не видел (т. е. это какая-то лажа); второй — идиоматичный башизм (про опечатку уже сказали). В POSIX sh пишут так: for var in $(seq 1 10); do ... done.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 4)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.