Can anyone please tell me why I am getting this unexpected token
error? I have tested two very similar versions, and one gives the error (the basic one), but the other does not.
{VAR_2=(1234-1234-1324-1234);VAR_1=(1234-1234-1324-1234);} > /dev/null 2>&1 && echo "${VAR_1[*]}" && echo "${VAR_2[*]}"
gives:
$ . ./tf-test1.sh
: command not found
1234-1234-1324-1234
1234-1234-1324-1234
Whereas
{
VAR_ARMCLIENTID=(1234-1234-1324-1234);
VAR_ARMCLIENTSECRET=('>#bOtp)#M@?<');
VAR_ARMSUBSCRIPTIONID=(1234-1234-1324-1234);
VAR_ARMTENANTID=(11234-1234-1324-1234);
VAR_ARRAYTOLOAD="";
VAR_SPMGNBSORGID=($(SPMGNBSORGID));
VAR_SPMGNBSORGSECRET=($(SPMGNBSORGSECRET));
VAR_TERRAFORM_ENVIRONMENT=($(TERRAFORM_ENVIRONMENT));
VAR_TERRAFORM_LOCATION=($(TERRAFORM_LOCATION));
} > /dev/null 2>&1
gives:
$ . ./tf-test.sh
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
SPMGNBSORGID: command not found
: command not found
SPMGNBSORGSECRET: command not found
: command not found
TERRAFORM_ENVIRONMENT: command not found
: command not found
TERRAFORM_LOCATION: command not found
: command not found
-bash: ./tf-test.sh: line 13: syntax error near unexpected token `}'
'bash: ./tf-test.sh: line 13: `} > /dev/null 2>&1
Just bear in mind that the $(something)
"command" is a pipeline variable that gets replaced by Azure DevOps as it runs the task. I've populated some of the fields just to test it out, and some are not, because that's how AzDO works. If there's no value, it writes the variable name as is (I hate this, but..) This is linked to my previous question here; Output command to null
Here is my full script that I've been messing about with
#!/bin/bash
{
VAR_ARMCLIENTID=(1234-1234-1324-1234);
VAR_ARMCLIENTSECRET=('>#bOtp)#M@?<');
VAR_ARMSUBSCRIPTIONID=(1234-1234-1324-1234);
VAR_ARMTENANTID=(11234-1234-1324-1234);
VAR_ARRAYTOLOAD="";
VAR_SPMGNBSORGID=($(SPMGNBSORGID));
VAR_SPMGNBSORGSECRET=($(SPMGNBSORGSECRET));
VAR_TERRAFORM_ENVIRONMENT=($(TERRAFORM_ENVIRONMENT));
VAR_TERRAFORM_LOCATION=($(TERRAFORM_LOCATION));
} > /dev/null 2>&1
pwd
echo "Loading vars into pipeline..."
if [ "$VAR_ARRAYTOLOAD" != "" ]; then
echo "Need to load $VAR_ARRAYTOLOAD array"
fi
IFS=' '
ARMarray=()
case "$VAR_ARRAYTOLOAD" in
"rbac") read -ra ARRAY1 <<< "ARM_CLIENT_ID=${VAR_SPMGNBSORGID[*]} ARM_CLIENT_SECRET=${VAR_SPMGNBSORGSECRET[*]} ARM_SUBSCRIPTION_ID=${VAR_ARMSUBSCRIPTIONID[*]} ARM_TENANT_ID=${VAR_ARMTENANTID[*]} ARM_ENVIRONMENT=${VAR_TERRAFORM_ENVIRONMENT[*]} ARM_LOCATION=${VAR_TERRAFORM_LOCATION[*]}"
echo "loading vars for RBAC"
;;
"msi") read -ra ARRAY1 <<< "ARM_SUBSCRIPTION_ID=${VAR_ARMSUBSCRIPTIONID[*]} ARM_TENANT_ID=${VAR_ARMTENANTID[*]} ARM_ENVIRONMENT=${VAR_TERRAFORM_ENVIRONMENT[*]} ARM_LOCATION=${VAR_TERRAFORM_LOCATION[*]}"
echo "loading vars for MSI"
;;
*) read -ra ARRAY1 <<< "ARM_CLIENT_ID=${VAR_ARMCLIENTID[*]} ARM_CLIENT_SECRET=${VAR_ARMCLIENTSECRET[*]} ARM_SUBSCRIPTION_ID=${VAR_ARMSUBSCRIPTIONID[*]} ARM_TENANT_ID=${VAR_ARMTENANTID[*]} ARM_ENVIRONMENT=${VAR_TERRAFORM_ENVIRONMENT[*]} ARM_LOCATION=${VAR_TERRAFORM_LOCATION[*]}"
echo "loading default vars"
;;
esac
for i in "${ARRAY1[@]}"; do
echo "-var='$i'"
ARMarray+=("-var='$i'")
done
echo "##vso[task.setvariable variable=TFARMarray;]${ARMarray[*]}"
echo "Combined ARM array output: ${ARMarray[*]}"
IFS=' '
VARarray=()
read -ra ARRAY2 <<< "${VAR_TFarray[*]}"
for i in "${ARRAY2[@]}"; do
echo "-var='$i'"
VARarray+=("-var='$i'")
done
echo "##vso[task.setvariable variable=TFarray;]${VARarray[*]}"
echo "Combined TF VAR array output: ${VARarray[*]}"
IFS=' '
TFVARSarray=()
read -ra ARRAY3 <<< "${VAR_TFtfvars[*]}"
for i in "${ARRAY3[@]}"; do
echo "-var-file=\"$SYSTEM_DEFAULTWORKINGDIRECTORY/$i\""
TFVARSarray+=("-var-file=\"$SYSTEM_DEFAULTWORKINGDIRECTORY/$i\"")
done
echo "##vso[task.setvariable variable=TFtfvars;]${TFVARSarray[*]}"
echo "Combined TF TFVARS output: ${TFVARSarray[*]}"