![]() |
|
Модераторы: powerfox, ZeeLax |
![]()
|
|
| maxipub |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 517 Регистрация: 22.10.2009 Репутация: нет Всего: 1 |
Добрый день!
Ребята, ничего не могу понять. Почему не хочет работать такой скрипт:
? Выдает ошибку:
Мне кажется, символ "-" надо как-то экранировать? Но как, не получилось... |
||||
|
|||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
Кавычки убрать.
|
|||
|
||||
| maxipub |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 517 Регистрация: 22.10.2009 Репутация: нет Всего: 1 |
tzirechnoy, да, спасибо, пару часов назад сам до этого дошел.
Добавлено через 37 секунд И вообще, для чего они там? |
|||
|
||||
| McMan |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 21.2.2007 Где: Ярославль Репутация: 1 Всего: 1 |
man date
? |
|||
|
||||
| maxipub |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 517 Регистрация: 22.10.2009 Репутация: нет Всего: 1 |
McMan, а при чем тут ман? Там с синтаксисом самой команды проблем вроде нет. Проблемы возникают с кавычками при вызове ее из скрипта. Ведь echo $(date '+%F-%H-%M-%S') работает, а echo $(date '-d "yesterday" +%F') - уже нет. Вот и неясно почему так.
echo $(date '+%F-%H-%M-%S') взял с примерка из одного сайта, там везде параметры взяты в кавычки. А зачем? |
|||
|
||||
| McMan |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 21.2.2007 Где: Ярославль Репутация: 1 Всего: 1 |
date +%F-%H-%M-%S без кавычек тоже работает
и date -d "yesterday" '+%F' тоже работает почему на одном сайте, все примеры взяты в кавычки затрудняюсь сказать а когда пишешь date '-d "yesterday" +%F' опция -d утилиты date попадает в кавычки, что нехорошо |
|||
|
||||
| maxipub |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 517 Регистрация: 22.10.2009 Репутация: нет Всего: 1 |
||||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
В юниксах аргументы командной строки передаются как список строк. Типично, если не ставить кавычки -- каждое слово -- одна строка. Т.е. echo 1 2 3 -- передаст три строки в echo: "1", "2" и "3". Команды обычно чутко реагируют на это разделение: один аргумент -- один элемент из списка (echo здесь в некотором роде исключение -- поскольку всё, что не опцыя -- объединяет с пробелами).
Кавычки позволяют изменить группировку аргументов -- например, если в аргументе есть пробел (или несколько пробелов), и они там (в аргументе) и должны остаться -- то кавычки -- самое то. date '-d "yesterday" +%F' -- передаёт команде date один аргумент: -d "yesterday" +%F (без одинарных кавычек, которые увидел и использовал bash, но с двойными кавычками внутри). date -d "yesterday" +%F -- передаёт команде date 3 аргумента: -d, yesterday и +%F (без двойных кавычек вокруг yesterday, кстати, поскольку двойные кавычки тожэ bash использовал для группировки). В первом случае date не считает -d "yesterday" +%F какой-то своей опцыей, потому считает, что раз это не опцыя -- то это указание даты (в формате, по ману [MMDDhhmm[[CC]YY][.ss]] ) -- и разумеется обамывается это так распарзить. О чём с говорит в сообщении "неверная дата". Во втором случае -- первый аргумент -d -- говорит что потом пойдёт строка с датой в расшыренном формате, следующий (yesterday) -- собственно дата, третий, раз начинается с + -- формат вывода. Да, ещё замечу про разницу двойных и одинарных кавычек (для bash): в одинарных кавычках никаких подстановок нет. И они продолжаются до следующей одинарной кавычки. В двойных кавычках -- есть подстановка переменных, начинается с символа $, есть подстановка результатов выполнения команд, начинаются с обратной кавычки, есть экранирование спецы.символов (тех жэ $, `, ", \) через обратный слэш ( \ ), ещё кажэтся подстановка восьмеричных кодов символов вида \060 и шэстнадцатиричных вида \0x30. А, и спец.символов \a, \b, \n, \r и т.д. В общем, захочешь -- прочтёшь. Т.е. ls '/зургатор\060 $PID / `echo 1`' -- предаст одним аргументом непосредственно все это \, $, пробелы, обратные кавычки. ls "/зургатор\060 $PID / `echo 1`" -- подставит вместо \060 -- 0, вместо $PID -- идэнтификатор процэсса, вместо `echo 1` -- то, что вывело echo без последнего перевода строки (т.е. 1). ls /зургатор\060 $PID / `echo 1` -- передаст 4 аргумента: /зургатор0, идэнтификатор, /, 1. |
|||
|
||||
![]()
|
| Правила форума "Linux/UNIX: Oбщие вопросы" | |
|
|
В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу). В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим. Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |