nafanja |
|
![]()
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
подскажите, есть ли простой способ расставить ";" в строке? такая команда lsblk -o NAME,FSTYPE,MOUNTPOINT,LABEL,UUID,PARTLABEL,RM,MODEL,SERIAL,SIZE,ROTA,TYPE,TRAN,VENDOR -a -P возвращает строку так вот как ее преобразовать в переменные баша?как видно разделитель пробел тут не канает что бы его заменить на ";" , нужно после закрывающей кавычки поставить ";" .
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
Это можно сделать, но: 1) рискованно, потому как есть ничто иное, как исполнение непроверенного кода; 2) lsblk достаточно гибок, чтобы выдавать ответы не только в "человекочитаемом", но и в "машиночитаемом" виде. Обычно я использую в скриптах такую конструкцию: Тогда он выводит просто строки со значениями без имён, разделяя значения пробелами, который можно читать в цикле с помощью read , а значения с пробелами и прочими спецсимволами можно потом декодировать с помощью конструкции
Разумеется, в этом случае список колонок надо сформировать в таким порядке, чтобы пустые значения не могли оказаться в середине строки – таково ограничение моего способа. Впрочем, при желании, есть способы прочитать строку с учётом пустых значений по числу пробелов :) |
nafanja |
|
![]()
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
Natrioне приемлемое ограничение!
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
Ну я же сказал – есть способы :) С помощью tr заменяем пробел на запятую, и заставляем read использовать запятую как разделитель, ибо пробелы она толкует в любом количестве как один, а запятые – строго по одной:
P.S. Я обычно не жадничал, и получал только нужные скрипту колонки, поэтому ограничение мне не мешало. Сей способ с запятыми я придумал только что, раньше как-то не требовалось. P.P.S. Если убрать ключ -d , можно получить от lsblk вывод по всем устройствам без предварительного списка. У меня была обратная цель – не трогать лишние устройства, поэтому я его и добавил. |
nafanja |
|
![]()
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
Natrio, благодарю, то что нужно. но вот запятую нужно заменить на символ который 100% не может встречаться в выводе. вопрос теперь какой это символ?
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
nafanja |
|
![]()
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
nafanjaчто бы долго не париться взял комбинацию из нескольких разных символов...
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
Прошу прощения, лопухнулся с запятой, думал что lsblk её закодирует как "потенциально опасный символ". Можно использовать, к примеру, \r, он точно кодируется:
А вот с комбинацией ничего не выйдет – в IFS как разделитель воспринимается не комбинация, а любой из перечисленных символов. |
nafanja |
|
![]()
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
NatrioДа, точно!
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
Kycok |
|
![]()
Темы:
32
Сообщения:
1585
Участник с: 09 января 2013
|
nafanjaМожно какой-нибудь % или @ |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
KycokНет, их тоже вполне можно засадить в метку, и lsblk не закодирует. \r вполне подходит - lsblk заменит его на код, и в выводе его не будет с гарантией. |