2015-08-30 3 views
0

Я написал Баш скрипт:Команда копирования не работает при добавлении даты

date=$(date +%F) 
cp $1 $1_$date 

Когда написана таким образом, и при условии, один аргумент, он отлично работает. Но если я пишу:

cp $1 $date_$1 

Я получаю сообщение об ошибке:

ф: '1.sh' и '1.sh' являются и тот же файл

Может кто-нибудь объяснить, для меня, пожалуйста, почему это происходит и как это можно решить. Благодаря!

+2

ф $ 1 дата $ "_ $ 1" работает. таким образом bash знает, когда заканчивается одно имя переменной, а другое начинается – amdixon

+3

Используйте $ {date}, который сообщает, где заканчивается переменная –

+2

Не строго дубликат (хотя я уверен, что мы можем найти его), но объяснение есть в http: // stackoverflow .com/questions/8748831/bash-when-do-we-need-curly-braces-in-variables – tripleee

ответ

3

Проблема в том, что _ является вполне допустимым символом в имени переменной.

Rewrite, как это:

cp $1 ${date}_$1 

То, что происходит это значение $date_ (обратите внимание на заднюю _), вероятно, является пустым. Таким образом, ваша команда становится действительно cp $1 $1. Используя фигурные скобки, мы уточним, что имя переменной - «дата», а не «дата_».

Вы должны также процитировать переменные, используемые в имена файлов, в случае, если они содержат пробелы:

cp "$1" "${date}_$1" 
+0

В первом нет скобок, потому что '1_' не является допустимым именем параметра. – chepner

+0

Спасибо @chepner, я должен был проверить это первым: -/Dropped this point. – janos

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