提取部分空格分隔的字符串
Extracting parts of whitespace seperated string
如果有几个 Git 个存储库包含一个文件 mergedriver.info
这个文件总是这样:
<project name>
<repository name>
由 Git 合并驱动程序触发的脚本正在评估此文件:
mergedriverinfo="$(git cat-file -p HEAD:mergedriver.info)"
success=$?
if [[ "$success" == "0" ]]; then
log "Evaluating mergedriver.info"
PROJECT_KEY="$(sed -E 's/([^\s]+)\s+([^\s]+)//' <<< $mergedriverinfo)"
REPO_SLUG="$(sed -E 's/([^\s]+)\s+([^\s]+)//' <<< $mergedriverinfo)"
log "PROJECT_KEY=$PROJECT_KEY"
log "REPO_SLUG=$REPO_SLUG"
else
log "Unable to read mergedriver.info"
exit 1
fi
我不明白 sed 在这种情况下的行为。
为此mergedriver.info
:
test
conflict-on-auto-merge
日志输出如下所示:
2017-07-20 11:05:51.747 PROJECT_KEY=test
2017-07-20 11:05:51.748 REPO_SLUG=tesconflict-on-auto-merge
起初我尝试用 sed -n 1p/2p 和 head/tail -1 读取 mergedriver.info,但不幸的是 $(git cat-file -p HEAD:mergedriver.info)
的输出对于两个不同的平台是不同的这个脚本是 运行:
平台 1:
$ od -c <<< $(git cat-file -p HEAD:mergedriver.info)
0000000 t e s t \n c o n f l i c t - o n
0000020 - a u t o - m e r g e \n
0000034
平台 2:
± od -c <<< $(git cat-file -p HEAD:mergedriver.info)
0000000 t e s t c o n f l i c t - o n
0000020 - a u t o - m e r g e \n
0000034
如何解决这个问题?
既然你用的是<<<
,那么我猜你用的是bash,所以你可以用mapfile
把你的变量拆分成一个数组,每行一个元素:
$ echo "$mergedriverinfo"
test
conflict-on-auto-merge
$ mapfile -t lines <<<"$mergedriverinfo"
$ echo "${lines[0]}"
test
$ echo "${lines[1]}"
conflict-on-auto-merge
因此您的项目密钥是元素 0,repo slug 是元素 1。
如果有几个 Git 个存储库包含一个文件 mergedriver.info
这个文件总是这样:
<project name>
<repository name>
由 Git 合并驱动程序触发的脚本正在评估此文件:
mergedriverinfo="$(git cat-file -p HEAD:mergedriver.info)"
success=$?
if [[ "$success" == "0" ]]; then
log "Evaluating mergedriver.info"
PROJECT_KEY="$(sed -E 's/([^\s]+)\s+([^\s]+)//' <<< $mergedriverinfo)"
REPO_SLUG="$(sed -E 's/([^\s]+)\s+([^\s]+)//' <<< $mergedriverinfo)"
log "PROJECT_KEY=$PROJECT_KEY"
log "REPO_SLUG=$REPO_SLUG"
else
log "Unable to read mergedriver.info"
exit 1
fi
我不明白 sed 在这种情况下的行为。
为此mergedriver.info
:
test
conflict-on-auto-merge
日志输出如下所示:
2017-07-20 11:05:51.747 PROJECT_KEY=test
2017-07-20 11:05:51.748 REPO_SLUG=tesconflict-on-auto-merge
起初我尝试用 sed -n 1p/2p 和 head/tail -1 读取 mergedriver.info,但不幸的是 $(git cat-file -p HEAD:mergedriver.info)
的输出对于两个不同的平台是不同的这个脚本是 运行:
平台 1:
$ od -c <<< $(git cat-file -p HEAD:mergedriver.info)
0000000 t e s t \n c o n f l i c t - o n
0000020 - a u t o - m e r g e \n
0000034
平台 2:
± od -c <<< $(git cat-file -p HEAD:mergedriver.info)
0000000 t e s t c o n f l i c t - o n
0000020 - a u t o - m e r g e \n
0000034
如何解决这个问题?
既然你用的是<<<
,那么我猜你用的是bash,所以你可以用mapfile
把你的变量拆分成一个数组,每行一个元素:
$ echo "$mergedriverinfo"
test
conflict-on-auto-merge
$ mapfile -t lines <<<"$mergedriverinfo"
$ echo "${lines[0]}"
test
$ echo "${lines[1]}"
conflict-on-auto-merge
因此您的项目密钥是元素 0,repo slug 是元素 1。