URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7879
[ Назад ]

Исходное сообщение
"как передать строку с пробелами из переменной в команду"

Отправлено ukpyr , 03-Фев-09 22:41 
как передать строку с пробелами из переменной в команду без кавычек ?

FILES_IN="file1 file2 file3 file4"

command $FILES_IN

программа ругается на наличие кавычек.
при присваивании FILES_IN просто списка без кавычек ругается уже строка присваивания.

может можно использовать другой разделитель (напр. запятую) и как-то заменить запятые пробелами ?


Содержание

Сообщения в этом обсуждении
"как передать строку с пробелами из переменной в команду"
Отправлено vic , 03-Фев-09 23:17 
>как передать строку с пробелами из переменной в команду без кавычек ?
>FILES_IN="file1 file2 file3 file4"

В таком виде внутри в переменной FILES_IN строка без кавычек, кавычки здесь только для корректной работы самой оболочки

>command $FILES_IN

это соответствует:
command file1 file2 file3 file4
запуск с 4 аргументами.

если необходимо передать строку 'file1 file2 file3 file4' как один аргумент, то следует делать так:
FILES_IN="file1 file2 file3 file4"
command "$FILES_IN"
это уже запуск с одним аргументом

>программа ругается на наличие кавычек.

как именно ругается? уверены что на кавычки ругается?


"как передать строку с пробелами из переменной в команду"
Отправлено ukpyr , 03-Фев-09 23:51 
>как именно ругается? уверены что на кавычки ругается?

забыл написать что используется zsh под win.
так вот получается что параметр подставляется как есть, с кавычками :
command "file1 file2 file3"
и команда (xgettext) воспринимает это как 1 параметр и ругается на отсутствие файла (может, это специфика Win-билда).

выкрутился пока так (поменял разделитель на запятую, а в команде заменяю запятые на пробелы sed-ом) :

FILES_IN=ul_snd.py,ul_snd_gui.py,ul_snd_gui.py,ul_cfg.py,ul_snd_cfg.py,ul_tran.py

xgettext -o $DOMAIN_NAME.pot -p $LOCALE_DIR -L $FILES_LANG --from-code=$FILES_ENC `echo $FILES_IN|sed 's/,/ /g'`

вообще странно что в shell-е нет средств работы со списками.


"как передать строку с пробелами из переменной в команду"
Отправлено vic , 04-Фев-09 00:59 
>>как именно ругается? уверены что на кавычки ругается?
>
>забыл написать что используется zsh под win.

больше так не делайте, по умолчанию рассматривается обычно bash, а в нем все несколько иначе.

>так вот получается что параметр подставляется как есть, с кавычками :
>command "file1 file2 file3"
>и команда (xgettext) воспринимает это как 1 параметр и ругается на отсутствие
>файла (может, это специфика Win-билда).

Это специфика zsh

измените это поведение указав
setopt shwordsplit
или почитайте доку на zsh (полно в инете и на этом сайте) и сделайте более правильно.
(я не могу сказать как именно т.к. юзаю либо bash, либо sh, изредка ksh)

>выкрутился пока так (поменял разделитель на запятую, а в команде заменяю запятые
>на пробелы sed-ом) :

изврат честно слово, почему не почитать доку?

>вообще странно что в shell-е нет средств работы со списками.

есть. тем более в zsh, даже мощнее чем в bash. Опять же читайте документацию.


"как-так"
Отправлено Andrey Mitrofanov , 04-Фев-09 12:21 
>>забыл написать что используется zsh под win.
>больше так не делайте, по умолчанию рассматривается обычно bash, а в нем
>все несколько иначе.

:)
"Больше так не делайте, по умолчанию предполагается уних-подобная свободная ОС, а в $друг_их_ ОС от mS -- просто **всё** не как у людей."


"как передать строку с пробелами из переменной в команду"
Отправлено ukpyr , 04-Фев-09 12:27 
>измените это поведение указав
>setopt shwordsplit

спасибо, помогло.
потом вспомнил что видел это в мануале zsh несколько лет назад. эхх, память...