我在詹金斯(Jenkins)有管道工作,有一个执行此bash脚本的步骤:
sh """
$ANDROID_HOME/platform-tools/adb pull /sdcard/Pictures/screenshots
if [ "$DEFAULT_LOCALE" = "en" ]
then
DEFAULT_LOCALE="en-US"
fi
if [ "${env.UPDATE_BASE}" == "true" ] || [ ! -d "${env.CACHE_HOME}/${env.BRANCH}" ]; then
if [ ! -d "${env.CACHE_HOME}/${env.BRANCH}" ]; then
mkdir -p ${env.CACHE_HOME}/${env.BRANCH}
fi
for imgfile in screenshots/*.png; do
if [[ $imgfile == *"_${env.DEFAULT_LOCALE}-"*.png ]]; then
cp -rf screenshots/$imgfile ${env.CACHE_HOME}/${env.BRANCH}
fi
done
else
rm -f screenshots/*_${env.DEFAULT_LOCALE}-*.png
cp -rf ${env.CACHE_HOME}/${env.BRANCH}/* screenshots
fi
"""
但是,当管道到达此步骤时,它将失败并显示以下错误:
groovy.lang.MissingPropertyException: No such property: imgfile for class: groovy.lang.Binding
脚本有什么问题?
答案 0 :(得分:0)
如果所有变量都是shell变量,则应使用三重单引号。
如果混合使用shell和Groovy变量(或仅使用Groovy变量),则应使用三重双引号。
为了在后一种情况下推迟对shell变量的求值,您需要使用以下其中一种形式对美元符号进行转义(我不确定是哪种形式):
if [[ \$imgfile == *"_${env.DEFAULT_LOCALE}-"*.png ]]; then
或
if [[ \\$imgfile == *"_${env.DEFAULT_LOCALE}-"*.png ]]; then
或
if [[ ${'$'}imgfile == *"_${env.DEFAULT_LOCALE}-"*.png ]]; then