как заставить `zip` добавлять расширение .zip, когда имя файла создается из переменной

#bash #zip

#bash #zip

Вопрос:

Если я запущу…

 $ myTest="bar"
$ zip -r foo-${myTest} path/*
  

…затем я получаю zip-файл с именем foo-bar.zip . (обратите внимание на .zip расширение!) Однако, если я запущу…

 $ myTest="1.0.1"
$ zip -r foo-${myTest} path/*
  

…затем я получаю zip-файл с именем foo-1.0.1 . (без .zip расширения!)

Я, очевидно, могу добавить .zip в свой скрипт, но я хотел бы понять, что здесь происходит. Почему не zip добавляется расширение, когда имя файла создается из переменной с числами в нем?

Ответ №1:

Когда я писал этот последний вопрос, меня осенило, что речь идет не о числах. Цитирование из man zip :

Если имя zip-архива не содержит расширения, добавляется расширение .zip . Если имя уже содержит расширение, отличное от .zip, существующее расширение сохраняется без изменений. Однако для разделения архивов (архивов, разделенных на несколько файлов) требуется расширение .zip при последнем разделении.

Проблема в том, что у меня есть . ‘s в переменной, которая zip интерпретируется как расширения имени файла. К счастью, мой скрипт создает переменную с . помощью ‘s, поэтому я могу уверенно добавлять .zip до конца. В противном случае мне нужно было бы проверить, чтобы . ‘s правильно назвал файл.