在bash命令中使用括号,git mv

jpn*_*jpn 1 bash git-bash

尝试使用括号重命名文件,但我一直遇到此错误,无法找到任何文档:

-bash: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)

我做的事情如下:

git mv title_1.1 title_(1.1)
Run Code Online (Sandbox Code Playgroud)

tha*_*guy 5

括号对于shell是特殊的 - 它们在定义函数,声明数组,使用命令替换和子shell时使用.

要按字面意思使用它们,就像在文件名中一样,只需添加适当的引用:

git mv title_1.1 "title_(1.1)"
Run Code Online (Sandbox Code Playgroud)

注意Mat的警告.这是一个中等风险的文件名,可能会导致某些写得不好的工具和脚本窒息.它比拥有空格更好,但比字母数字更糟糕.


Bar*_*den 5

括号用于表示 posix 下的子 shell,因此它们是 sh、bash、ksh 等下的保留字。要告诉 shell 您希望括号不作为 shell 语法的一部分,您可以引用它们:

git mv title_1.1 "title_(1.1)"

git mv title_1.1 'title_(1.1)'
Run Code Online (Sandbox Code Playgroud)

或者你可以逃避他们:

git mv title_1.1 title_\(1.1\)
Run Code Online (Sandbox Code Playgroud)

但是,shell 脚本通常不会考虑到这一点,这意味着在尝试处理使用括号的文件名时,它们中的很多都会中断。

避免与正则表达式 [-.a-zA-Z0-9_] 不匹配的文件名被认为是一种很好的做法,即字母数字字符、破折号、点和下划线。