* [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: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
* 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
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