The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Раздел полезных советов: Специфичные особенности удаления элементов массивов в Bash"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Специфичные особенности удаления элементов массивов в Bash"  +1 +/
Сообщение от auto_tips (?), 29-Мрт-21, 10:59 
В руководствах Bash упоминается, что команда "unset name[N]" выполняет удаление элемента массива, например:

https://www.gnu.org/software/bash/manual/html_node/Arrays.ht...

   The unset builtin is used to destroy arrays.
   unset name[subscript] destroys the array element at index subscript.

https://tldp.org/LDP/abs/html/arrays.html

   unset colors[1]              # Remove 2nd element of array.

https://www.opennet.ru/docs/RUS/bash_scripting_guide/c12790....

   unset colors[1]              # Удаление 2-го элемента массива.

Данное описание не соответствует действительности, так как элемент массива для корректного удаления необходимо заключить в кавычки '..'

Для конкретного примера:

   unset 'colors[1]'

Если не использовать кавычки, то bash попытается сделать расширение имени и заменит "unset colors[1]" на "unset colors1". Проверить это можно выполнив:

   > touch colors1
   > bash example_25_3.sh


URL:
Обсуждается: http://www.opennet.ru/tips/info/3177.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от Анонимчик (?), 29-Мрт-21, 10:59 
А где этот загадочный example_25_3.sh взять?
Ответить | Правка | Наверх | Cообщить модератору

2. "Специфичные особенности удаления элементов массивов в Bash"  –2 +/
Сообщение от Аноним (-), 29-Мрт-21, 17:45 
зочем ? на баше скрипты ни пишут, только sh
Ответить | Правка | Наверх | Cообщить модератору

5. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от Аноним (5), 31-Мрт-21, 16:01 
Кто не пишет? Среднестатистический Anon пишет.
Ответить | Правка | Наверх | Cообщить модератору

6. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от Аноним (-), 01-Апр-21, 03:46 
Умные аноны не пишут же.

А статистика в среднем печалит - вы кстати посмотрите, за кого они голосуют...

Ответить | Правка | Наверх | Cообщить модератору

24. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от Анон анонимно (?), 12-Апр-21, 11:35 
Это когда для развлечения. А пишут на развитых инструментах. Ограничение себя неразвитыми - знак неудобных особенностей. В том или ином.
Ответить | Правка | Наверх | Cообщить модератору

29. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от ммнюмнюмус (?), 25-Май-21, 16:21 
Умные перекладывают всё, что можно, на awk, sed, numfmt и т.д., оставляя оболочке только установку конвеера.
Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

30. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от ммнюмнюмус (?), 25-Май-21, 16:30 
Собственно пример. Не скажу что работает как часы - у меня только на одном компе нормально.
https://unixforum.org/viewtopic.php?f=12&t=150895
Ответить | Правка | Наверх | Cообщить модератору

18. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от svsd_valemail (ok), 07-Апр-21, 15:03 
Вы удивитесь, но в 90% скриптов .sh в качестве интерпретатора установлен /bin/bash и в большинстве систем /bin/sh ссылается на /bin/bash ;-) Да и само расширение sh не обязательно должно быть, так как без специальных включалок/отключалок ядро заходит в файл читает первую строчку и смотрит что там указано пытаясь выполнить указанный интерпретатор ....

Если поставить включить поддержку форматов, то можно к примеру на 32бит запускать arm и x64 да и всё что душе угодно.... было бы указано что и чем есть...

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

19. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от edv (ok), 07-Апр-21, 17:24 
> Если поставить включить поддержку форматов, то можно к примеру на 32бит запускать arm и x64 да и всё что душе угодно.... было бы указано что и чем есть...

Будьте любезны, подскажите как на i386 железе без средств виртуализации запустить x86-64 приложение?

Ответить | Правка | Наверх | Cообщить модератору

20. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от svsd_valemail (ok), 07-Апр-21, 17:58 
>> Если поставить включить поддержку форматов, то можно к примеру на 32бит запускать arm и x64 да и всё что душе угодно.... было бы указано что и чем есть...
> Будьте любезны, подскажите как на i386 железе без средств виртуализации запустить x86-64
> приложение?

Поясните пожалуйста где Я говорил о том что это будет без средств виртуализации ??? по сути дела что бы запустить любую иную архитектуру на машине должен будет стоять binfmt-support и qemu-static- который будет выступать в роли интерпретатора  и позволит выполнять всё что нужно... почему так: потому что большая часть кода иной архитектуры будет интерпретироваться и за счёт этого будет низкая производительность ...

Ответить | Правка | Наверх | Cообщить модератору

21. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от Аноним (-), 07-Апр-21, 19:42 
> в качестве интерпретатора установлен /bin/bash и в большинстве систем /bin/sh ссылается на /bin/bash ;-)

нет. твой локалхост на убунте не большинство систем

Ответить | Правка | К родителю #18 | Наверх | Cообщить модератору

23. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от svsd_val (ok), 12-Апр-21, 04:14 
>> в качестве интерпретатора установлен /bin/bash и в большинстве систем /bin/sh ссылается на /bin/bash ;-)
> нет. твой локалхост на убунте не большинство систем

Вот как раз админы локал хостов что угодно могут ставить xD

Ответить | Правка | Наверх | Cообщить модератору

35. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от ммнюмнюмус (?), 26-Май-21, 21:10 
> зочем ? на баше скрипты ни пишут, только sh

pulseaudio-ctl, bashmount, imgurbash2

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

3. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от Аноним (3), 29-Мрт-21, 22:41 
Джентельмены верят друг другу на слово.
Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

14. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от edv (ok), 04-Апр-21, 21:15 
Автор так-то указал ссылку в тексте.
Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

7. "Специфичные особенности удаления элементов массивов в Bash"  –1 +/
Сообщение от СеменСеменыч777 (?), 01-Апр-21, 17:50 
"программистов", чьи скрипты не проходят через
https://sourceforge.net/projects/checkbaskisms/

нужно пороть.
гоните их, насмехайтесь над ними.

Ответить | Правка | Наверх | Cообщить модератору

8. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от Аноним (8), 02-Апр-21, 00:53 
борьба с башизмами -- это что-то из времен, когда баш не был предустановлен на каждом утюге?

# checkbashisms.perl
# (C) Copyright 1998-2003 Richard Braakman, Josip Rodin and Julian Gilbey

Современные скрипты следует прогонять через современные линтеры, viz. ShellCheck.

Ответить | Правка | Наверх | Cообщить модератору

10. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от СеменСеменыч777 (?), 03-Апр-21, 10:43 
> баш не был предустановлен на каждом утюге?

аргумент не очень веский.
винда предустановлена на 90% продаваемых ноутбуков, и дальше что ?

Ответить | Правка | Наверх | Cообщить модератору

11. "Специфичные особенности удаления элементов массивов в Bash"  +1 +/
Сообщение от Аноним (8), 04-Апр-21, 01:24 
Портабельность - это то, что требует аргументов. Отсутствие портабельности - это состояние по-умолчанию, и аргументов не требует. Любая программа по умолчанию непортабельна, а переход на портабельность требует анализа и аргументов: нужна ли она на самом деле, какая с этого выгода, нельзя ли портабельность отдать на откуп даунстриму, чтоб апстрим не заморачивался ноль-процентной экзотикой и т.д. Причем ответы на эти вопросы следует получить не один раз, а задаваться ими буквально для каждого скрипта.

Так что жду твоих аргументов, почему с "башизмами" нужно бороться. Зачем нужно, кому нужно, какая с этого выгода и далее по списку.

Ответить | Правка | Наверх | Cообщить модератору

31. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от ммнюмнюмус (?), 26-Май-21, 09:41 
Для утюгов - только dash, и это при условии, что для coreutils есть место. Иначе busybox.
Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

32. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от ммнюмнюмус (?), 26-Май-21, 10:02 
И ещё, к сожалению, писать без башизмов почти невозможно, если у вас bash по дефолту и вы пользуетесь "info bash". Потому что некоторые из башизмов занесены в раздел Basic Shell Features - brace expansion, process substitution (должно быть в Bash Features). А опция --posix только отключает POSIX-несовместимости, поддержка расширений никуда не девается.

Единственный вариант писать без них - тестировать на dash, руководствуясь man dash.
Ну или вот сам стандарт: https://pubs.opengroup.org/onlinepubs/9699919799/toc.htm
Он же: https://standards.ieee.org/standard/1003_1-2017.html

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

9. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от Blind Vic (ok), 02-Апр-21, 12:12 
> Специфичные особенности удаления элементов массивов в Bash

Интересно, чем отличаются "особенности" от "специфичных особенностей"? Более специфично особенным заголовком для статьи?

Ответить | Правка | Наверх | Cообщить модератору

12. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от edv (ok), 04-Апр-21, 21:04 
В русском переводе Advanced Bash-Scripting Guide, на который явно ссылается автор топика, заголовок обсуждаемого примера переведён как "Некоторые специфичные особенности массивов".

Другое дело, что в оригинале это "Some special properties of arrays". Но это Вам к изначальному переводчику или внести свой вклад в исправление и актуализацию перевода.

Ответить | Правка | Наверх | Cообщить модератору

13. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от Blind Vic (ok), 04-Апр-21, 21:07 
> В русском переводе Advanced Bash-Scripting Guide, на который явно ссылается автор топика,
> заголовок обсуждаемого примера переведён как "Некоторые специфичные особенности массивов".
> Другое дело, что в оригинале это "Some special properties of arrays". Но
> это Вам к изначальному переводчику или внести свой вклад в исправление
> и актуализацию перевода.

Спасибо за разъяснения. Значит должно было быть "Некоторые особенные свойства массивов".

Ответить | Правка | Наверх | Cообщить модератору

15. "Специфичные особенности удаления элементов массивов в Bash"  +1 +/
Сообщение от edv (ok), 04-Апр-21, 21:21 
Интересно. Натыкался на подобное поведение с переменными.

Если я правильно понимаю, то в переводе уже поправили. А в оригинал заслали правку? Не факт, что в следующий раз перевод буду читать.

Ответить | Правка | Наверх | Cообщить модератору

25. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от izyk (ok), 12-Апр-21, 22:48 
Для доступа к элементам массива ВСЕГДА используйте полную запись ${colors[1]}. А лучше вообще не нужно использовать массивы в bash т.к. будет что-то типа этого: ${colors[${index}]}. Если нужны массивы используйте для этого, что-нибудь более подходящее, ИМХО.
Ответить | Правка | Наверх | Cообщить модератору

26. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от izyk (ok), 12-Апр-21, 23:18 
https://www.gnu.org/software/bash/manual/html_node/Arrays.ht...

When using a variable name with a subscript as an argument to a command, such as with unset, without using the word expansion syntax described above, the argument is subject to the shell’s filename expansion. If filename expansion is not desired, the argument should be quoted.

Ответить | Правка | Наверх | Cообщить модератору

27. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от pavlinux (ok), 20-Апр-21, 14:27 
Во-первых, что за такая операция "удаление элемента массива"? Сам придумал?


Во-вторых, доступ к элементам массива в БАШЕ осуществляется через ...
вот так: unset ${colors[1]}, более того, это тоже моветон,
в БАШЕ к элементам лучше обращаться по индексам: unset ${array[@]:1:1}


unset colors[1] удаляет значение переменной с именем colors[1]

Ответить | Правка | Наверх | Cообщить модератору

28. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от pavlinux (ok), 20-Апр-21, 14:46 
Хотя пофиг, интересен тайный смысл "удаление элемента массива"? Где профит?

Проход по массиву пока есть элементы тоже бред, с лишней операцией удаления.

Как хранилище нужных данных? Так почему не проверять на нужность
перед добавлением в массив, а не удалять после?

Во время выполнения скрипта память не освобождается, это не ассемблер.

Ответить | Правка | Наверх | Cообщить модератору

33. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от ммнюмнюмус (?), 26-Май-21, 11:38 
> в БАШЕ к элементам лучше обращаться по индексам: unset ${array[@]:1:1}

А вот это уже черезжопа. "Как в мире возможно", чтобы _нормальное_ обращение по инжексу было моветоном?

Ответить | Правка | К родителю #27 | Наверх | Cообщить модератору

34. "Специфичные особенности удаления элементов массивов в Bash"  +/
Сообщение от ммнюмнюмус (?), 26-Май-21, 11:47 
bash "[@]:1:1" - даже гугл такого не знает
Ответить | Правка | К родителю #27 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру