たとえばCIRCLE_PULL_REQUEST
という環境変数にフルのGitHub Pull Requestの URLが入っているとする。具体的にはこんな感じ:
export CIRCLE_PULL_REQUEST=https://github.com/octocat/Spoon-Knife/issues/1 echo $CIRCLE_PULL_REQUEST # https://github.com/octocat/Spoon-Knife/issues/1
この変数からpullreq-numberを取り出すのは、通常のシェルではカンタンに実現できる:
echo ${CIRCLE_PULL_REQUEST##*/} # 1
しかしMakefile上では事前に変数が展開されてしまうため、以下のようなファイルを用意し:
SHELL:=/bin/sh test: echo blam! && \ echo ${CIRCLE_PULL_REQUEST##*/} && \ echo 'done.'
実行すると:
make test # echo blam! && \ # echo && \ # echo 'done.' # blam! # # done.
うまくいかないのである。
すなわちescapeすればよい:
SHELL:=/bin/sh test: echo blam! && \ echo $${CIRCLE_PULL_REQUEST##*/} && \ echo 'done.'
diff
5c5 < echo ${CIRCLE_PULL_REQUEST##*/} && \ --- > echo $${CIRCLE_PULL_REQUEST##*/} && \
これでうまくいく。
make test # echo blam! && \ # echo ${CIRCLE_PULL_REQUEST##*/} && \ # echo 'done.' # blam! # 1 # done.
変数に収めたい時はこうするとよい:
SHELL:=/bin/sh CIRCLE_PR_NUMBER?=$(shell echo $${CIRCLE_PULL_REQUEST\#\#*/}) test: echo blam! && \ echo ${CIRCLE_PR_NUMBER} && \ echo 'done.'
make test # echo blam! && \ # echo 1 && \ # echo 'done.' # blam! # 1 # done.