Фигурные скобки.

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

vasek, не тот раздел, нужен вот єтот
ЗЫ. Тот, который вы указали настоящий sh не bash донт андерстенд. Например, залогинтесь в роутер, правда там busybox, но не суть, и попробуйте выполнить
ls /{s,}bin
anode
Предлагаю обсудить исламский фундаментализм в другой теме, флудить в теме с хорошим и нужным скриптом как-то не есть хорошо.
поддерживаю...
но все равно 99% всего смысла данных топиков описано в первом посте, поэтому это не совсем флуд... а предложения и обсуждение предложения (почему именно так, а не иначе).
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
а предложения и обсуждение предложения
вот как еще один пример, описания понятия зависящее от контекста.
в первом случае это множественное число, во втором единственное. но описание одинаковое...
в итоге понятие описанное как "предложения" не равно понятию "предложения", что вносит путаницу.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Основное предназначение фигурніх скобок - это механизм подстановки или, как говорит документация - Parameter expansion. Частный случай применения этой Parameter expansion - это замена значения переменной на значение ее же в тех местах, где сразу за именем переменной следуют симолы, которые являются допустимыми в именах переменных, дабы не делать лишних телодвижений. Заскобливать все переменные - это, как из пушки по воробьям, можно и результат будет при всех условиях, даже в кромешной мгле и при отсутствии воробьев. На примере данной программы. Строка 70 ${guiW} скобки обязательны, т.к. переменной guiWx нет, а дальше до конца строки и даром не нать. Где же однообразие? Спросите у Sébastien "Seblu" Luttringer мантайнера coreutils. Вот строка из его PKGBUILDa
patch -p1 -N -i "$srcdir/${filename##*/}"
И ни какого "однообразия", только там, где єто необходимо. Пример PKGBUILD со всеми заскоблеными переменными я жду )))
anode
vasek, не тот раздел, нужен вот єтот
когда давал ссылку, стоял перед выбором - тот или этот ... выбрал этот.

anode
Тот, который вы указали настоящий sh не bash донт андерстенд. Например, залогинтесь в роутер, правда там busybox, но не суть, и попробуйте выполнить
ls /{s,}bin
Чистый sh вместо bash в системе вряд ли у кого стоит …
А вот что там в роутере, проверить не могу - не имею … , но вряд ли там стоит sh … , просьба показать выводы echo $SHELL и ls -l $(which sh)
PS - в выводе ls /{s,}bin - не будет /sbin или /bin ? - но это не значит, что используется чистый sh

Привожу свои выводы разных bash/sh (разумеется вывод echo $SHELL везде будет одинаков /bin/bash)
1. Обычная система
~ ---> ls -l $(which sh)
lrwxrwxrwx 1 root root 4 ноя 13 20:31 /usr/bin/sh -> bash
2. busybox
~ ---> /usr/lib/initcpio/busybox sh
sh-5.0$ ls -l $(which sh)
lrwxrwxrwx 1 root root 4 ноя 13 20:31 /usr/bin/sh -> bash
3. Свой sh, представляющий следующий код (после компиляции получится утилита sh_code)
\x48\x31\xd2\x52\x48\xb8\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x50\x48\x89\xe7\x52\x57\x48\x89\xe6\x48\x31\xc0\xb0\x3b\x0f\x05
---> ~/.../sh_code
sh-5.0$ ls -l $(which sh)
which: no sh in ((null))
total 184
... и далее идет обычный вывод ls -l (только вместо кирилицы другие символы ...)
drwxr-xr-x   2 vasek users  4096 Dec 19  2018 '***RECURSION DETECTED***'
-rwxr-xr-x   1 vasek users  1009 Feb 28  2019  free_mem.sh
-rwxr-xr-x   1 vasek users  1219 Oct  3  2017  hda-analyzer.py
-rwxr-xr-x   1 vasek users 14848 Aug 14  2017  procstat
-rwxr-xr-x   1 vasek users  1218 Aug  9  2017  run.py
........
drwxr-xr-x   2 vasek users  4096 Nov 28  2018 ''$'\320\222\320\270\320\264\320\265\320\276'
drwxr-xr-x 139 vasek users  4096 Nov 13 15:55 ''$'\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\321\213'

EDIT 1 - размер файлов (в байтах - bash=900Kb, sh_code=16Kb)
stat -c%s  /usr/bin/bash ........... 903440
stat -c%s ~/.../sh_code ............   16368
Ошибки не исчезают с опытом - они просто умнеют
anode
Где же однообразие? Спросите у Sébastien "Seblu" Luttringer мантайнера coreutils. Вот строка из его PKGBUILDa
я тебе о логическом заключении, что ${x} можно использовать всегда, а $x не всегда, исходя из этого $x лишняя сущность такая же как и константа, процедура.
а ты ссылаешься на другого человека... типа вот он тоже так делает... (((
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
${x} можно использовать всегда, а $x не всегда
всегда то всегда .... но как пишут
$x и ${x}имеют одинаковую семантику, но фигурные скобки вообщем то не нужны … за исключением случаев, когда нужно отделить переменную от следующей за ней строки/символа
в этом их основное удобство и преимущество ...... в остальных случаях фигурные скобки вообщем то и не нужны.
Пример удобства использования фигурных скобок - имеем переменную pacma … используя {} мы можем просто получить утилиту pacman
cat ~/test.sh
#!/bin/sh
var=pacma
X=$(echo "${var}n -S --help")
$X
но в большинстве случаев эти фигурные скобки просто не нужны, лишние.
Ошибки не исчезают с опытом - они просто умнеют
vasek
всегда то всегда …. но как пишут
да не важно как пишут, важно как оно есть...
а есть оно так: если заскобить все не заскобленные переменные, то ничего в ПО не изменится.
vasek
но в большинстве случаев эти фигурные скобки просто не нужны, лишние.
да и прочувствуй разницу "в большинстве случаев" и "всегда"
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja, не знаю ни одного чела, который бы всегда использовал только фигурные скобки ...
А учитывая то, что семантика одинакова, не использовать фигурные скобки просто удобнее - меньше писанины .... для большинства и это большой плюс
Ошибки не исчезают с опытом - они просто умнеют
vasek, я понимаю эти плюсы, а так же понимаю что bash специализированный интерпретируемый язык...
а я оцениваю его как интерпретируемый язык общего назначения.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
 
Зарегистрироваться или войдите чтобы оставить сообщение.