LINUX.ORG.RU
ФорумAdmin

переменные со скобками в bash

 


0

1

Добрый день. Стоит задача открывать проводник через ссылку в браузере. Написал скрипт, но появилась загвоздка. Путь в проводнике имеет скобки, из-за которых переменная не идет в обработку. Как можно сделать, чтобы переменная проходила сразу или подавалась с ""?



Последнее исправление: ThePainRevenge (всего исправлений: 2)
Ответ на: комментарий от infomeh

пример пути: smb://ip/portal/СМ32094-(user)-41246

пример кода: #!/bin/bash a=$1 echo $a decode=$(echo -e $(echo $a|sed «s/%//g»)) decode=$(echo -e $(echo $decode|sed «s/forfolder:/smb:/»)) echo $decode decode=$(echo -e $(echo $decode|sed «s/[]//g»)) echo $decode decode=$(echo -e $(echo $decode|sed «s|ip|ip/|»)) decode=$(echo -e $(echo $decode|sed «s|portal|portal/|»)) decode=$(echo -e $(echo $decode|sed «s/D090/А/g»)) decode=$(echo -e $(echo $decode|sed «s/D091/Б/g»)) decode=$(echo -e $(echo $decode|sed «s/D092/В/g»)) decode=$(echo -e $(echo $decode|sed «s/D093/Г/g»)) decode=$(echo -e $(echo $decode|sed «s/D094/Д/g»)) decode=$(echo -e $(echo $decode|sed «s/D095/Е/g»)) decode=$(echo -e $(echo $decode|sed «s/D096/Ж/g»)) decode=$(echo -e $(echo $decode|sed «s/D097/З/g»)) decode=$(echo -e $(echo $decode|sed «s/D098/И/g»)) decode=$(echo -e $(echo $decode|sed «s/D099/Й/g»)) decode=$(echo -e $(echo $decode|sed «s/D09A/К/g»)) decode=$(echo -e $(echo $decode|sed «s/D09B/Л/g»)) decode=$(echo -e $(echo $decode|sed «s/D09C/М/g»)) decode=$(echo -e $(echo $decode|sed «s/D09D/Н/g»)) decode=$(echo -e $(echo $decode|sed «s/D09E/О/g»)) decode=$(echo -e $(echo $decode|sed «s/D09F/П/g»)) decode=$(echo -e $(echo $decode|sed «s/D0A0/Р/g»)) decode=$(echo -e $(echo $decode|sed «s/D0A1/С/g»)) decode=$(echo -e $(echo $decode|sed «s/D0A2/Т/g»)) decode=$(echo -e $(echo $decode|sed «s/D0A3/У/g»)) decode=$(echo -e $(echo $decode|sed «s/D0A4/Ф/g»)) decode=$(echo -e $(echo $decode|sed «s/D0A5/Х/g»)) decode=$(echo -e $(echo $decode|sed «s/D0A6/Ц/g»)) decode=$(echo -e $(echo $decode|sed «s/D0A7/Ч/g»)) decode=$(echo -e $(echo $decode|sed «s/D0A8/Ш/g»)) decode=$(echo -e $(echo $decode|sed «s/D0A9/Щ/g»)) decode=$(echo -e $(echo $decode|sed «s/D0AA/Ъ/g»)) decode=$(echo -e $(echo $decode|sed «s/D0AB/Ы/g»)) decode=$(echo -e $(echo $decode|sed «s/D0AC/Ь/g»)) decode=$(echo -e $(echo $decode|sed «s/D0AD/Э/g»)) decode=$(echo -e $(echo $decode|sed «s/D0AE/Ю/g»)) decode=$(echo -e $(echo $decode|sed «s/D0AF/Я/g»)) decode=$(echo -e $(echo $decode|sed «s/D0B0/а/g»)) decode=$(echo -e $(echo $decode|sed «s/D0B1/б/g»)) decode=$(echo -e $(echo $decode|sed «s/D0B2/в/g»)) decode=$(echo -e $(echo $decode|sed «s/D0B3/г/g»)) decode=$(echo -e $(echo $decode|sed «s/D0B4/д/g»)) decode=$(echo -e $(echo $decode|sed «s/D0B5/е/g»)) decode=$(echo -e $(echo $decode|sed «s/D0B6/ж/g»)) decode=$(echo -e $(echo $decode|sed «s/D0B7/з/g»)) decode=$(echo -e $(echo $decode|sed «s/D0B8/и/g»)) decode=$(echo -e $(echo $decode|sed «s/D0B9/й/g»)) decode=$(echo -e $(echo $decode|sed «s/D0BA/к/g»)) decode=$(echo -e $(echo $decode|sed «s/D0BB/л/g»)) decode=$(echo -e $(echo $decode|sed «s/D0BC/м/g»)) decode=$(echo -e $(echo $decode|sed «s/D0BD/н/g»)) decode=$(echo -e $(echo $decode|sed «s/D0BE/о/g»)) decode=$(echo -e $(echo $decode|sed «s/D0BF/п/g»)) decode=$(echo -e $(echo $decode|sed «s/D180/р/g»)) decode=$(echo -e $(echo $decode|sed «s/D181/с/g»)) decode=$(echo -e $(echo $decode|sed «s/D182/т/g»)) decode=$(echo -e $(echo $decode|sed «s/D183/у/g»)) decode=$(echo -e $(echo $decode|sed «s/D184/ф/g»)) decode=$(echo -e $(echo $decode|sed «s/D185/х/g»)) decode=$(echo -e $(echo $decode|sed «s/D186/ц/g»)) decode=$(echo -e $(echo $decode|sed «s/D187/ч/g»)) decode=$(echo -e $(echo $decode|sed «s/D188/ш/g»)) decode=$(echo -e $(echo $decode|sed «s/D189/щ/g»)) decode=$(echo -e $(echo $decode|sed «s/D18A/ъ/g»)) decode=$(echo -e $(echo $decode|sed «s/D18B/ы/g»)) decode=$(echo -e $(echo $decode|sed «s/D18C/ь/g»)) decode=$(echo -e $(echo $decode|sed «s/D18D/э/g»)) decode=$(echo -e $(echo $decode|sed «s/D18E/ю/g»)) decode=$(echo -e $(echo $decode|sed «s/D18F/я/g»)) Thunar $decode

Cсылка кодируется, по этому пришлось сделать такой декодер с костылями и прочим

ThePainRevenge
() автор топика
Ответ на: комментарий от ThePainRevenge

Теперь я понял, почему второе слово твоего ника - «боль» :)

Оформи все в лоркод или маркдаун, пожалуйста.

PunkoIvan ★★★★
()

Для проводника все-таки лучше что-то другое, не bash.

anonymous
()
Ответ на: комментарий от ThePainRevenge

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

anonymous
()
Ответ на: комментарий от ThePainRevenge

Все $decode надо заключить в двойные кавычки.

PS @vodz вот почему я всегда топлю за то, чтобы не обрабатывать данные самим bash в стиле Паскаля или подобного ЯП, а передавать во внешние утилиты. Не потому, что bash не может это делать нормально - может. Но у публики почему-то всегда выходит вот это вот. Что-то раз за разом уводит бедняг на путь кошмарного говнокода, боли и безумия. Если бы тс не знал, что в bash есть переменные - он бы не применил их так.

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

c костылями

Ладно, норм всё. Оставь так. Через год поржёшь хоть)

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

Отправьте на говнокод, страна должна знать своих героев!

anonymous
()
Ответ на: комментарий от legolegs

PS @vodz вот почему я всегда топлю за то, чтобы не обрабатывать данные самим bash в стиле Паскаля или подобного ЯП,

К сожалению, топик создал начинающий программист и bash тут вовсе не при чём. Думаешь, он бы написал один вызов sed? Ну допустим. И разве 256 s/HH/буква/ было б по твоему достаточно? А вот по моему надо делать именно в «Паскале»-стиле:

urldecode2() {
        printf -v $1 "${!1//%/\\x}"
}
urldecode() {
        eval $1=\${!1//+/ }
        urldecode2 $1
}

x="%d0%9f+%d0%98"
urldecode x
echo "$x"
Красиво, понятно тому, кто хочет разобраться и знает bash и уж точно не ужас-ужас.

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

понятно тому, кто хочет разобраться и знает bash

А кто не хочет разобраться и не знает, тот не будет городить функцию в функции.

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

А кто не хочет разобраться и не знает, тот не будет городить функцию в функции.

Это не мои проблемы, ибо я специально сделал для того, чтобы разобраться, нагляднее, (впрочем поленился обозвать decode_plus и decode_hex). А тот кто втащит это не разбираясь и не зная bash в одну функцию и не сможет затолкать. :)

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