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

Using parentheses in bash commands, git mv

尝试使用括号重命名文件,但我一直遇到此错误并且找不到任何相关文档:

-bash: syntax error near unexpected token `('

我在做类似的事情:

git mv title_1.1 title_(1.1)

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

如在文件名中一样按字面意义使用它们,只需添加适当的引号:

git mv title_1.1 "title_(1.1)"

注意 Mat 的警告。这是一个中等风险的文件名,可能会导致某些编写不当的工具和脚本阻塞。它比有空格好,但比字母数字差。

圆括号用来表示posix下的一个subshell,所以在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_] 不匹配的文件名,即字母数字字符、破折号、点和下划线。