shell
${var#*.} # 从左边第一个.及左边的删除,保留右边${var##*.} # 从右边第一个.及左边的删除,保留右边${var%.*} # 从右边第一个.及右边的删除,保留左边${var##*.} # 从右边第一个.及右边的删除,保留左边${var:7} # 从左边第7个字符开始显示${var:7:2} # 从左边第7个字符开始显示2个字符${var:0-9} # 从右边第9个字符开始显示到最后${var:0-9:2} # 从右边第9个字符开始显示2个字符pushd DIR # 压入DIR目录到栈空间,并切换到DIRpopd # 切换到出栈目录env 显示环境变量set 显示环境变量和SHELL函数set -u 等价 set -o nounset 遇到不存在的变量直接报错,而不是默认忽略set -x 等价 set -o xtrace 输出命令本身后再输出命令的结果,默认没有输出命令本身 set -e 等价 set -o errexit 只要脚本发生错误就退出set -o pipefail 默认情况下管道连接的多条命令以最后一条命令的退出码标识整条命令 可能出现中间命令失败的问题 所以需要打开set -o pipefail 打开后只要子命令失败,整个命令即为失败如果某些情况下非零退出码不代表失败可以参考以下命令set +e 临时关闭-e选项,后续要开启时再执行 set -ecommand1 || exit 1 命令1失败后退出,默认情况下失败后继续执行下面的语句command1 && command2 命令1成功后执行命令2使用方式1. 脚本开头添加 set -euxo pipefail使用方式2. bash -euxo pipefail script.sh# 脚本模式(set -emain)value=$?if [ $value != 0 ]then(set -ecatch)fi(set -efinally)exit $value# 判断file存在并且有内容if test -s file; then
git
# 子模块更新
if [ -f .gitmodules ] && [ ! -f .ignoresubmodule ]; then
git submodule update --init --recursive
fi
# 最新提交ID
git rev-parse HEAD