2015-03-08 64 views
1

嘗試使用括號來重命名文件,但我一直在打這個錯誤並不能找到它周圍的任何文檔:使用括號,git的MV

-bash: syntax error near unexpected token `(' 

我做這樣的事情:

git mv title_1.1 title_(1.1) 
+4

只要自己幫忙,不要這樣做。這會給你無窮無盡的問題(寫得不好)。 – Mat 2015-03-08 20:31:17

+0

而且,不幸的是,你會遇到的大多數腳本都寫得很糟糕。 – Balthamos 2015-03-08 21:19:59

+0

雖然大部分寫得很差的腳本都可以在文件名中使用parens。只有那些添加了第二級評估的評估,如'ssh'或'eval',纔會有問題。你的平均寫得不好的腳本只是沒有正確引用就可以。 – 2015-03-08 21:29:00

回答

5

括號對於shell來說是特殊的 - 它們在定義函數,聲明數組,使用命令替換和subhells時使用。

要按字面意義使用它們,如文件名,只需添加適當的引用:

git mv title_1.1 "title_(1.1)" 

注墊的警告,但。這是一箇中等風險的文件名,可能會導致某些寫得不好的工具和腳本窒息。它比有空格要好,但比字母數字更糟。

3

圓括號用於表示posix下的子shell,因此它們是sh,bash,ksh等下的保留字。要告訴shell希望括號不要作爲shell語法的一部分,您可以說出來了:

git mv title_1.1 "title_(1.1)" 

git mv title_1.1 'title_(1.1)' 

,或者你可以逃脫他們:

git mv title_1.1 title_\(1.1\) 

然而,這往往不是由shell腳本考慮,這意味着很多很多的努力來處理文件名時,將打破其使用括號。

避免與正則表達式[-.a-zA-Z0-9_]不匹配的文件名,即字母數字字符,破折號,圓點和下劃線被認爲是一種好的做法。