项目实施中,多人合作开发,进行SVN版本控制是非常有必要的. 发布代码工作也是其繁琐的(当然小型项目直接可以通过FTP方式上传),  自己动手写了一个基于bash方式进行自动发布导出svn两版本之间的文件shell脚本. 来进行代码发布.

但中间遇到一个问题,  文件名中含有shell脚本的小括号. 以至在脚本发布代码, 无法正常地将文件导出.提示”未预期的符号 `(‘ 附近有语法错误”. 这是由于shell中小括号被执行成脚本符号.其作用:

①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。
②命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。
③用于初始化数组。如:array=(a b c d)

此时. 需要将小括号转义为普通字符即可.

shell转义符有三种。

字符说明如下:

”  单引号,  硬转义,其内部所有的shell元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号).
“”  双引号, 软转义,其内部只允许出现特定的shell元字符($,`,\):$用于变量值替换、`用于命令替换.
\  反斜杠,   转义,去除其后紧跟的元字符或通配符的特殊意义.

CMD="svn export -r ${NEW_VERSION}  ${SVN_URL}${DIFF_FILE}  ${FOLDER_PATH}/${FILE_NAME}  --force"

修改为:

CMD="svn export -r ${NEW_VERSION} '${SVN_URL}${DIFF_FILE}' '${FOLDER_PATH}/${FILE_NAME}' --force"

文件路径两边加上单引号, 重新执行svn代码发布脚本, 正常导出.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


*