AWS CodeBuild, buildspec.yml “bad substitution” error

Solution for AWS CodeBuild, buildspec.yml “bad substitution” error
is Given Below:

I’m using AWS CodeBuild, and I need to manipulate an environment variable. I originally tried using a bash pattern substitution, like this, in the buildspec.yml:

    on-failure: ABORT
      - env="${CODEBUILD_WEBHOOK_TRIGGER/tag//}"

CODEBUILD_WEBHOOK_TRIGGER should be something like tag/my-tag-name, and I want to remove the tag/ part of it. This command works fine from a local bash shell, but when performned in CodeBuild, this is the output:

[Container] 2021/08/02 21:29:28 Running command env="${CODEBUILD_WEBHOOK_TRIGGER/tag//}"
/codebuild/output/tmp/ 4: Bad substitution
[Container] 2021/08/02 21:29:28 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: env="${CODEBUILD_WEBHOOK_TRIGGER/tag//}". Reason: exit status 2

I ended up replacing the pattern substitution with an awk command just to get it working, but it makes for more complex code. And I don’t understand why the pattern substitution doesn’t work?

Here’s the awk command I ended up using, which is working fine:

    on-failure: ABORT
      - env="`echo $CODEBUILD_WEBHOOK_TRIGGER | awk -F/ '$1=="tag" {print $2;}'`"

CodeBuild might not be using bash. Try this :