shell 使用数组及字符串截取

最近代码发布要迁移到 jenkins,需要写一个构建脚本模板提供给研发人员,用python写可能对研发和测试提高了使用门槛,只能用shell了

  • 数组
    百度了一下发现 shell使用的数组定义是用括号起来的,不同元素之意用空格分开,ex: test.sh arr=('aa' 'bb' 'cc')
    执行 sh test.sh的时间老是报这个数组的括号语法错误 Syntax error: "(" unexpected,百度了一下发现是shell的原因
    file
    使用 bash test.sh就没有问题了,使用 ${arr[0]} 来取值
  • 字符串截取
    在 git 仓库里 使用 git checkout -f commitid ,结果如下:
    HEAD is now at 9f212321... test deploy script
    目的是想要获取 commit 提交信息的,因为第一次拉代码执行这个命令时,在这行上面还会有其它信息,所以在取最后一行,最后一行 hash(9f212321...) 后面的内容就是我们想的提交信息,使用命令:
    hash_msg=`git checkout -f ${commit_hash} 2>&1 | tail -1`
    hash_msg=${hash_msg#*...}
    echo "Commit message: ${hash_msg}"

    使用管理的加上 tail -1 来获取最后一行,如果没有加上 2>&1 这个最后一行是无法赋值给 hash_msg的,具体原因还不明,最后使用 ${hash_msg#*...} 来获取信息,# 表示操作符,*... 表示从左到右匹配 ...,截取 ... 后面的字符,参考 https://baijiahao.baidu.com/s?id=160642549...

本作品采用《CC 协议》,转载必须注明作者和本文链接
雪花飘
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1
  1. 印象中 POSIX SHELL 标准是不支持数组的,Bash 对数组进行了「有限的」实现,所以需要使用 Bash。

  2. 更加简单的实现方式:echo "Commit message: $(git log -1 --pretty=%B)"
5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!