имена файлов с пробелами
Написал скрипт на bash для простой задачи: в цикле по маске перебираются файлы из данной директории, нечто выполняется с ними, а потом текущий файл переименовывается; допустим, f.txt в ~f.old.
Переименование делаю вызовом команды: Код:
mv $filename.txt ~$filename.old С консоли можно эту операцию закавычить: Код:
>$ mv "x y.txt" "~x y.old" Как правильно написать? |
IZOprogman,
а если так: Код:
ls -l Рабочий\ стол Код:
mv "x\ y.txt" "~x y.old" |
IZOprogman, думаю, что правильно писать так
Код:
mv ""\$oldfile\"" ""\$newfile\"" Если же вы в тексте скрипта экранируете кавычки, тогда при выполнении скрипта BASH преобразует \" в нормальные кавычки и в результате преобразует переменную в имя файла, обозначенное кавычками, что устранит все возможные проблемы с пробелами. |
Ох, а ларчик-то открывался просто!
Оказывается аргументы комангды надо было просто... закавычить! Код:
mv "$filename.txt" "~$filename.old" |
Нейл Мэтью Ричард Стоунс
Основы программирования в 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 |
Время: 04:54. |
Время: 04:54.
© OSzone.net 2001-