ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [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