2013-06-04 4 views
0

Когда я пишу сценарий оболочки, как это:чтения нескольких слов текста из командной строки

echo -n 'Enter description of new version: '; 

read desc; 

git commit -m $desc; 

и когда я вхожу описание нескольких слов, то он берет только одно слово в $ убыв и дает мне ошибки как:

Enter description of new version: hope it works 
error: pathspec 'it' did not match any file(s) known to git. 
error: pathspec 'works'' did not match any file(s) known to git. 
fatal: too many params 

и иногда это дает как:

Enter description of new version: final check 
error: pathspec 'check'' did not match any file(s) known to git. 
fatal: Failed to resolve 'check'' as a valid ref. 
Everything up-to-date 

Что такое р roblem с моим скриптом?

Пожалуйста, предложите причину и решение, чтобы прочитать описание нескольких слов из командной строки в переменную $ убыв

Я попытался с помощью:

echo -n 'Enter description of new version: '; 

read text; 

desc="'"$text"'"; 

git commit -m $desc; 

Но не использовать.

Спасибо заранее

+0

Я попытался использовать 'git commit -m '$ desc'', а также' git commit -m' "'$ desc'" '' Но это не сработало, почему? – sivareddy963

ответ

3

Вам нужно процитировать:

git commit -m "$desc" 

Разница заключается в том, что один между:

git commit -m hope it works 

и

git commit -m "hope it works" 

Первые попытки к зафиксировать файлы it и works с сообщением hope, а последний фиксирует индекс с сообщением hope it works.

+0

Спасибо, что это работает ..! – sivareddy963

+0

Ya для этой цели я использовал одинарные кавычки, т. Е. 'Git commit -m '$ desc' ' Также я попытался использовать' git commit -m' "'$ desc' '' ' Но это не сработало , Зачем? – sivareddy963

+0

Параметры не расширены в одинарных кавычках. Во втором случае вы не цитируете '$ desc', поэтому он все еще расширяется до отдельных слов, прежде чем оболочка даже просмотрит две буквальные двойные кавычки (каждая из которых отдельно цитируется одинарными кавычками). – chepner

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