* [Comm] bash trouble @ 2004-05-07 7:00 Andrew Fefilov 2004-05-07 7:12 ` Valery V. Inozemtsev ` (2 more replies) 0 siblings, 3 replies; 11+ messages in thread From: Andrew Fefilov @ 2004-05-07 7:00 UTC (permalink / raw) To: community Добрый день, уважаемые. Вот наткнулся на непонятки в bash scripting. Сижу грепаю man bash, но пока не просветвляет. Может кто подскажет, если не в лом. Ситуация такая - скриптику через аргуметы передается имя файла, в котором имеется несколько пробелов, идущих подряд. Видимо, bash обрабатывает строку аргументов, разбивая ее на позиционные параметры, которые он считает разделены пробелами. В результате этого, мой аргумет приводится к виду, когда вместо несколько идущих пробелов остается только один. Поскольу это имя файла - то сие неприемлемо. Вот для наглядности: [faqa@faa 444]$ ./proba "/ttt/kkk/lll kkk" /ttt/kkk/lll kkk [faqa@faa 444]$ cat ./proba #!/bin/bash echo $1 Как видно из примера, в аргументе между "lll" и "kkk" стоит два пробела. А в выводе скрипта уже остается только один. Как бы эти грабельки обойти? -- С уважением, Фефилов Андрей. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] bash trouble 2004-05-07 7:00 [Comm] bash trouble Andrew Fefilov @ 2004-05-07 7:12 ` Valery V. Inozemtsev 2004-05-07 7:38 ` Andrew Fefilov 2004-05-07 9:31 ` Sergey Vlasov 2004-05-07 18:18 ` Maksim Otstavnov 2 siblings, 1 reply; 11+ messages in thread From: Valery V. Inozemtsev @ 2004-05-07 7:12 UTC (permalink / raw) To: community <skip> > [faqa@faa 444]$ ./proba "/ttt/kkk/lll kkk" > /ttt/kkk/lll kkk > > [faqa@faa 444]$ cat ./proba > #!/bin/bash > echo $1 > > > Как видно из примера, в аргументе между "lll" и "kkk" стоит два пробела. А > в выводе скрипта уже остается только один. Как бы эти грабельки обойти? [faqa@faa 444]$ ./proba "/ttt/kkk/lll*kkk" а еще лучше не присваивать файлам имена с пробклами -- Valery V. Inozemtsev ftp://ftp.altlinux.ru/pub/people/shrek/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] bash trouble 2004-05-07 7:12 ` Valery V. Inozemtsev @ 2004-05-07 7:38 ` Andrew Fefilov 2004-05-07 7:56 ` Valery V. Inozemtsev 0 siblings, 1 reply; 11+ messages in thread From: Andrew Fefilov @ 2004-05-07 7:38 UTC (permalink / raw) To: community On Fri, May 07, 2004 at 11:12:40AM +0400, Valery V. Inozemtsev wrote: > > <skip> > > [faqa@faa 444]$ ./proba "/ttt/kkk/lll kkk" > > /ttt/kkk/lll kkk > > > > [faqa@faa 444]$ cat ./proba > > #!/bin/bash > > echo $1 > > > > > > Как видно из примера, в аргументе между "lll" и "kkk" стоит два пробела. А > > в выводе скрипта уже остается только один. Как бы эти грабельки обойти? > > [faqa@faa 444]$ ./proba "/ttt/kkk/lll*kkk" Пардон, конечно, но я что-то не понял Ваше решение. Чем должна эта звездочка помочь? Дело в том, что в моей задаче агрументы для proba поставляет xargs, которому их скормил find. Каким образом я буду программно заменять идущие подряд несколько пробелов на звездочку я сейчас не очень представляю. Вообще, конечно, можно, наверное, составить список файлов сначала, потом пройтись по этому списку, заменяя пробелы на звездочки, а потом уже натравливать на преобразованный список proba. Но как то это уже монстрообразностью отдает. Я думал, может есть у bash какая ручка, которую можно покрутить, чтобы он воспринимал строку аргументов как единое целое, не пытаясь ее парсить. > а еще лучше не присваивать файлам имена с пробклами С этим я с Вами полностью согласен. Другое дело, что приходится контактировать с теми, кто этой религии не подвержен :) -- С уважением, Фефилов Андрей. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] bash trouble 2004-05-07 7:38 ` Andrew Fefilov @ 2004-05-07 7:56 ` Valery V. Inozemtsev 2004-05-07 8:16 ` Andrew Fefilov 0 siblings, 1 reply; 11+ messages in thread From: Valery V. Inozemtsev @ 2004-05-07 7:56 UTC (permalink / raw) To: community В сообщении от 7 Май 2004 11:38 Andrew Fefilov написал(a): > On Fri, May 07, 2004 at 11:12:40AM +0400, Valery V. Inozemtsev wrote: > > <skip> > > > > > [faqa@faa 444]$ ./proba "/ttt/kkk/lll kkk" > > > /ttt/kkk/lll kkk > > > > > > [faqa@faa 444]$ cat ./proba > > > #!/bin/bash > > > echo $1 > > > > > > > > > Как видно из примера, в аргументе между "lll" и "kkk" стоит два > > > пробела. А в выводе скрипта уже остается только один. Как бы эти > > > грабельки обойти? > > > > [faqa@faa 444]$ ./proba "/ttt/kkk/lll*kkk" > > Пардон, конечно, но я что-то не понял Ваше решение. Чем должна эта > звездочка помочь? избавимся от пробелов в имени > Дело в том, что в моей задаче агрументы для proba > поставляет xargs, которому их скормил find. Каким образом я буду > программно заменять идущие подряд несколько пробелов на звездочку я сейчас > не очень представляю. find ./ttt -type f | tr ' ' '*' > Вообще, конечно, можно, наверное, составить список > файлов сначала, потом пройтись по этому списку, заменяя пробелы на > звездочки, а потом уже натравливать на преобразованный список proba. Но > как то это уже монстрообразностью отдает. да нет > Я думал, может есть у bash какая > ручка, которую можно покрутить, чтобы он воспринимал строку аргументов как > единое целое, не пытаясь ее парсить. не нашел > > > а еще лучше не присваивать файлам имена с пробклами > > С этим я с Вами полностью согласен. Другое дело, что приходится > контактировать с теми, кто этой религии не подвержен :) эх... -- Valery V. Inozemtsev ftp://ftp.altlinux.ru/pub/people/shrek/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] bash trouble 2004-05-07 7:56 ` Valery V. Inozemtsev @ 2004-05-07 8:16 ` Andrew Fefilov 0 siblings, 0 replies; 11+ messages in thread From: Andrew Fefilov @ 2004-05-07 8:16 UTC (permalink / raw) To: community On Fri, May 07, 2004 at 11:56:14AM +0400, Valery V. Inozemtsev wrote: > В сообщении от 7 Май 2004 11:38 Andrew Fefilov написал(a): > > On Fri, May 07, 2004 at 11:12:40AM +0400, Valery V. Inozemtsev wrote: > > > <skip> > > > > > > > [faqa@faa 444]$ ./proba "/ttt/kkk/lll kkk" > > > > /ttt/kkk/lll kkk > > > > > > > > [faqa@faa 444]$ cat ./proba > > > > #!/bin/bash > > > > echo $1 > > > > > > > > > > > > Как видно из примера, в аргументе между "lll" и "kkk" стоит два > > > > пробела. А в выводе скрипта уже остается только один. Как бы эти > > > > грабельки обойти? > > > > > > [faqa@faa 444]$ ./proba "/ttt/kkk/lll*kkk" > > > > Пардон, конечно, но я что-то не понял Ваше решение. Чем должна эта > > звездочка помочь? > > избавимся от пробелов в имени > > > Дело в том, что в моей задаче агрументы для proba > > поставляет xargs, которому их скормил find. Каким образом я буду > > программно заменять идущие подряд несколько пробелов на звездочку я сейчас > > не очень представляю. > > find ./ttt -type f | tr ' ' '*' Фу, млин! А ведь мысль! Сразу освободиться от пробелов, скажем, символом подчеркивания и всё! т.е. щас вот так наваяю: find -type f -print0 | xargs -l1 -0 | tr ' ' '_' | и_вперЁд_! Спасибо, Валерий! Туговато в начале мая соображалка работает :) > > Вообще, конечно, можно, наверное, составить список > > файлов сначала, потом пройтись по этому списку, заменяя пробелы на > > звездочки, а потом уже натравливать на преобразованный список proba. Но > > как то это уже монстрообразностью отдает. > > да нет > > > Я думал, может есть у bash какая > > ручка, которую можно покрутить, чтобы он воспринимал строку аргументов как > > единое целое, не пытаясь ее парсить. > > не нашел > > > > > > а еще лучше не присваивать файлам имена с пробклами > > > > С этим я с Вами полностью согласен. Другое дело, что приходится > > контактировать с теми, кто этой религии не подвержен :) > > эх... -- С уважением, Фефилов Андрей. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] bash trouble 2004-05-07 7:00 [Comm] bash trouble Andrew Fefilov 2004-05-07 7:12 ` Valery V. Inozemtsev @ 2004-05-07 9:31 ` Sergey Vlasov 2004-05-07 10:07 ` Andrew Fefilov 2004-05-07 18:18 ` Maksim Otstavnov 2 siblings, 1 reply; 11+ messages in thread From: Sergey Vlasov @ 2004-05-07 9:31 UTC (permalink / raw) To: community [-- Attachment #1: Type: text/plain, Size: 947 bytes --] On Fri, May 07, 2004 at 12:00:48PM +0500, Andrew Fefilov wrote: > Добрый день, уважаемые. Вот наткнулся на непонятки в bash scripting. Сижу > грепаю man bash, но пока не просветвляет. Может кто подскажет, если не в > лом. Ситуация такая - скриптику через аргуметы передается имя файла, в > котором имеется несколько пробелов, идущих подряд. Видимо, bash > обрабатывает строку аргументов, разбивая ее на позиционные параметры, > которые он считает разделены пробелами. В результате этого, мой аргумет > приводится к виду, когда вместо несколько идущих пробелов остается только > один. Поскольу это имя файла - то сие неприемлемо. Вот для наглядности: > > [faqa@faa 444]$ ./proba "/ttt/kkk/lll kkk" > /ttt/kkk/lll kkk > > [faqa@faa 444]$ cat ./proba > #!/bin/bash > echo $1 > > > Как видно из примера, в аргументе между "lll" и "kkk" стоит два пробела. А > в выводе скрипта уже остается только один. Как бы эти грабельки обойти? echo "$1" [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] bash trouble 2004-05-07 9:31 ` Sergey Vlasov @ 2004-05-07 10:07 ` Andrew Fefilov 2004-05-07 10:19 ` Sergey Vlasov 2004-05-07 10:47 ` Mike Lykov 0 siblings, 2 replies; 11+ messages in thread From: Andrew Fefilov @ 2004-05-07 10:07 UTC (permalink / raw) To: community On Fri, May 07, 2004 at 01:31:28PM +0400, Sergey Vlasov wrote: > On Fri, May 07, 2004 at 12:00:48PM +0500, Andrew Fefilov wrote: > > Добрый день, уважаемые. Вот наткнулся на непонятки в bash scripting. Сижу > > грепаю man bash, но пока не просветвляет. Может кто подскажет, если не в > > лом. Ситуация такая - скриптику через аргуметы передается имя файла, в > > котором имеется несколько пробелов, идущих подряд. Видимо, bash > > обрабатывает строку аргументов, разбивая ее на позиционные параметры, > > которые он считает разделены пробелами. В результате этого, мой аргумет > > приводится к виду, когда вместо несколько идущих пробелов остается только > > один. Поскольу это имя файла - то сие неприемлемо. Вот для наглядности: > > > > [faqa@faa 444]$ ./proba "/ttt/kkk/lll kkk" > > /ttt/kkk/lll kkk > > > > [faqa@faa 444]$ cat ./proba > > #!/bin/bash > > echo $1 > > > > > > Как видно из примера, в аргументе между "lll" и "kkk" стоит два пробела. А > > в выводе скрипта уже остается только один. Как бы эти грабельки обойти? > > echo "$1" Хм. Работает. Только не понятно, почему. Сергей, хотя бы ключевое слово/выражение по которому порыскать по man bash, можно ? -- С уважением, Фефилов Андрей. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] bash trouble 2004-05-07 10:07 ` Andrew Fefilov @ 2004-05-07 10:19 ` Sergey Vlasov 2004-05-07 18:41 ` Valery V. Inozemtsev 2004-05-07 10:47 ` Mike Lykov 1 sibling, 1 reply; 11+ messages in thread From: Sergey Vlasov @ 2004-05-07 10:19 UTC (permalink / raw) To: community [-- Attachment #1: Type: text/plain, Size: 391 bytes --] On Fri, May 07, 2004 at 03:07:19PM +0500, Andrew Fefilov wrote: > > > Как видно из примера, в аргументе между "lll" и "kkk" стоит два пробела. А > > > в выводе скрипта уже остается только один. Как бы эти грабельки обойти? > > > > echo "$1" > > Хм. Работает. Только не понятно, почему. Сергей, хотя бы ключевое > слово/выражение по которому порыскать по man bash, можно ? Word Splitting [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] bash trouble 2004-05-07 10:19 ` Sergey Vlasov @ 2004-05-07 18:41 ` Valery V. Inozemtsev 0 siblings, 0 replies; 11+ messages in thread From: Valery V. Inozemtsev @ 2004-05-07 18:41 UTC (permalink / raw) To: community В сообщении от 7 Май 2004 14:19 Sergey Vlasov написал(a): > On Fri, May 07, 2004 at 03:07:19PM +0500, Andrew Fefilov wrote: > > > > Как видно из примера, в аргументе между "lll" и "kkk" стоит два > > > > пробела. А в выводе скрипта уже остается только один. Как бы эти > > > > грабельки обойти? > > > > > > echo "$1" > > > > Хм. Работает. Только не понятно, почему. Сергей, хотя бы ключевое > > слово/выражение по которому порыскать по man bash, можно ? > > Word Splitting хм... это все хорошо конечно... а теперь сравним вывод LST=`find ~/Documents/Music -type f | grep ' '` for i in $LST; do echo $i done и заменим for i in "$LST"; do -- Valery V. Inozemtsev ftp://ftp.altlinux.ru/pub/people/shrek/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] bash trouble 2004-05-07 10:07 ` Andrew Fefilov 2004-05-07 10:19 ` Sergey Vlasov @ 2004-05-07 10:47 ` Mike Lykov 1 sibling, 0 replies; 11+ messages in thread From: Mike Lykov @ 2004-05-07 10:47 UTC (permalink / raw) To: community В сообщении от Пятница 07 Май 2004 15:07 Andrew Fefilov написал: > > echo "$1" > Хм. Работает. Только не понятно, почему. Потому что с кавычками он передает "что-то с пробелом" как единый параметр, а без них - считает за несколько, и соответственно расставляет их по своему - через один пробел ;) -- Mike ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] bash trouble 2004-05-07 7:00 [Comm] bash trouble Andrew Fefilov 2004-05-07 7:12 ` Valery V. Inozemtsev 2004-05-07 9:31 ` Sergey Vlasov @ 2004-05-07 18:18 ` Maksim Otstavnov 2 siblings, 0 replies; 11+ messages in thread From: Maksim Otstavnov @ 2004-05-07 18:18 UTC (permalink / raw) To: community Hello Andrew, Friday, May 07, 2004, 11:00:48 AM, you wrote: AF> приводится к виду, когда вместо несколько идущих пробелов остается только AF> один. Поскольу это имя файла - то сие неприемлемо. Вот для наглядности: AF> [faqa@faa 444]$ ./proba "/ttt/kkk/lll kkk" Нет, если цепочка заключена в кавычки, она интерпретируется (командой probe) как один аргумент... AF> /ttt/kkk/lll kkk AF> [faqa@faa 444]$ cat ./proba AF> #!/bin/bash AF> echo $1 ...А вот команда "echo" после раскрытия переменной "$1" получает уже, разумеется, два аргумента. В данном случае Вы можете просто поставить "$1" в своем скрипте в кавычки. -m. ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2004-05-07 18:41 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2004-05-07 7:00 [Comm] bash trouble Andrew Fefilov 2004-05-07 7:12 ` Valery V. Inozemtsev 2004-05-07 7:38 ` Andrew Fefilov 2004-05-07 7:56 ` Valery V. Inozemtsev 2004-05-07 8:16 ` Andrew Fefilov 2004-05-07 9:31 ` Sergey Vlasov 2004-05-07 10:07 ` Andrew Fefilov 2004-05-07 10:19 ` Sergey Vlasov 2004-05-07 18:41 ` Valery V. Inozemtsev 2004-05-07 10:47 ` Mike Lykov 2004-05-07 18:18 ` Maksim Otstavnov
ALT Linux Community general discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 community community/ http://lore.altlinux.org/community \ mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com public-inbox-index community Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.community AGPL code for this site: git clone https://public-inbox.org/public-inbox.git