2016-07-06 3 views
1

Я пытаюсь переименовать мою папку.Переименовать папку с переменной в центре

Текущее имя папки = яблоко. Я хочу переименовать его в apsomeple.

«Некоторые» в центре нового имени будут переменной.

Я пробовал следующее, но он не работает. Пожалуйста посоветуй. Если я добавлю его в конец для тестирования, он будет работать.

name="some" 

mv apple ap$nameple # doesn't work 
mv apple apple$name # works - just testing 

ответ

3

Вы можете использовать {} разграничить имя переменной:

mv apple ap${name}ple 

Если есть шанс, переменная будет содержать символ пробела, в отличие от примера, приведенного, то в дополнение вам нужно будет поставить двойной котировки вокруг ввода нового имени файла:

mv apple "ap${name}ple" 
+0

Отсутствуют двойные кавычки вокруг 'ap $ {name} ple' – sjsam

+0

@sjsam Двойные кавычки не нужны. –

+1

Э-э ... Вы уверены? рассмотрите 'name =" некоторый материал "и проверьте сами. Они необходимы для предотвращения расщепления слов в этом случае. – sjsam

1
mv apple "ap${name}ple" 

должен работать


Почему двойные кавычки необходимы в выходные

Рассмотрим

name="some stuff" 

С

mv apple ap${name}ple 

Разделение слов происходит с ${name}, и вы не получите ожидаемого результата. Так mv может дать вам:

mv: target ‘stuffple’ is not a directory 

С

mv apple "ap${name}ple" 

ap${name}ple считается единым целым.

+0

двойные кавычки не нужны. –

+0

@PaulL: см. Редактирование. – sjsam

1

Поместите скобки вокруг имени переменной.

mv apple "ap${name}ple" 

EDIT: После некоторых локальных испытаний, похоже, что zsh и bash обрабатывают этот случай несколько иначе. Bash делает нужны двойные кавычки, чтобы предотвратить разбиение и глобусы слов, в то время как zsh делает нет нужны двойные кавычки и ведет себя одинаково независимо.

+0

Отсутствуют двойные кавычки 'ap $ {name} ple' – sjsam

+1

@sjsam вместо того, чтобы опробовать ответы каждого, вы могли бы попробовать сделать это сами, и вы увидите, что двойные кавычки не нужны. –

+1

@PaulL: Этот комментарий кажется тупым – sjsam

3

Напишите свои переменные!

mv apple ap"$name"ple 

В качестве альтернативы, вы можете использовать фигурные скобки (еще в кавычках):

mv apple "ap${name}ple" 

Некоторые могут сказать, что котировки не являются необходимыми в данном случае, но лично я считаю, что выгоды (а более надежный скрипт) перевешивают стоимость (незначительные два лишних символа).

+0

Двойные кавычки не нужны с фигурными скобками –

+0

Да, они есть, чтобы предотвратить расщепление слов и расширение glob. –

+0

Просто протестировано с помощью 'name =" ap * "' и 'name =" so me "', результирующие файлы были 'apap * ple' и' apso meple' независимо от кавычек. Я использую zsh not bash, но я считаю, что они совместимы в этом отношении. EDIT: Я был неправ! Двойные кавычки необходимы в bash, но не zsh. – 0x5453

1

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

mv apple ap"$name"ple 
+0

Эх! Я не думаю, что это заслуживает понижения, за исключением форматирования, которое я сделал сейчас! – sjsam

-2
mv /path/tofolder/oldfilename /path/tofolder/newname 

например: если папка находится в расположенном на рабочем столе

mv /home/Desktop/apple /home/Desktop/apsomeple 
+1

Вы прочитали вопрос? –

Смежные вопросы