|
Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » [решено] имена файлов с пробелами |
|
[решено] имена файлов с пробелами
|
![]() Пользователь Сообщения: 85 |
Написал скрипт на bash для простой задачи: в цикле по маске перебираются файлы из данной директории, нечто выполняется с ними, а потом текущий файл переименовывается; допустим, f.txt в ~f.old.
Переименование делаю вызовом команды: Это проходит, если в имени файла нет пробелов; если они есть, то команда начинает воспринимать последний "токен" как конечную директорию. С консоли можно эту операцию закавычить: - и это проходит. Но в скрипте из-за пробелов в исходном имени она воспринимает опять же новое имя как директорию. А если закавычить первый аргумент, она... воспринимает кавычки как часть имени и не находит такой файл! Как правильно написать? |
|
Отправлено: 02:28, 24-12-2015 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать |
Отправлено: 16:16, 24-12-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
ИО Капитана Очевидности Сообщения: 5387
|
Профиль | Отправить PM | Цитировать IZOprogman, думаю, что правильно писать так
Если вы в тексте скрипта просто напишете двойные кавычки, тогда BASH воспримет это как строковое значение с вложенной переменной, и при выполнении скрипта он преобразует переменную в имя файла без кавычек, и у вас будут проблемы с пробелами Если же вы в тексте скрипта экранируете кавычки, тогда при выполнении скрипта BASH преобразует \" в нормальные кавычки и в результате преобразует переменную в имя файла, обозначенное кавычками, что устранит все возможные проблемы с пробелами. |
------- Отправлено: 01:55, 25-12-2015 | #3 |
![]() Пользователь Сообщения: 85
|
Профиль | Отправить PM | Цитировать |
Отправлено: 00:00, 31-12-2015 | #4 |
Назгул Сообщения: 2633
|
Профиль | Отправить PM | Цитировать Нейл Мэтью Ричард Стоунс
Основы программирования в Linux стр. 48 Заключение в кавычки Прежде чем двигаться дальше, вам следует уяснить одно правило командной оболочки: использование кавычек. Обычно параметры в сценариях отделяются неотображаемыми символами или знаками форматирования (например, пробелом, знаком табуляции или символом перехода на новую строку). Если вы хотите, чтобы параметр содержал один или несколько неотображаемых символов, его следует заключить в кавычки. Поведение переменных, таких как $foo, заключенных в кавычки, зависит от вида используемых кавычек. Если вы заключаете в двойные кавычки $-представление переменной, оно во время выполнения командной строки заменяется значением переменной. Если вы заключаете его в одинарные кавычки или апострофы, никакой замены не происходит. Вы также можете отменить специальное назначение символа $, вставив перед ним символ \ (обратный слэш). Выполним упражнение 2.1. Упражнение 2.1. Игра с переменными В этом упражнении показано, как кавычки влияют на вывод переменной: #!/bin/sh myvar="Hi there" echo $myvar echo "$myvar" echo '$myvar' echo \$myvar echo Enter some text read myvar echo '$myvar' now equals $myvar exit 0 |
|
------- Отправлено: 21:29, 20-02-2016 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] MKVMerge и мульон файлов: склеить дорожки из разных папок с пробелами | R.i.m.s.k.y. | Скриптовые языки администрирования Windows | 2 | 15-06-2013 11:33 | |
CMD/BAT - [решено] Системные имена файлов | Cypp0raT | Скриптовые языки администрирования Windows | 3 | 24-11-2012 18:46 | |
CMD/BAT - [решено] кириллические имена файлов и маска ~*.* | ffs2001 | Скриптовые языки администрирования Windows | 18 | 04-04-2012 02:05 | |
Интерфейс - Имена файлов в папке Windows\Media | Билл Гейтс | Microsoft Windows 2000/XP | 3 | 09-11-2008 13:10 | |
Удаление файлов с пробелами в имени в cmd | o3opHuk | Хочу все знать | 5 | 28-02-2006 15:53 |
|