jenkins parameter behaves differently from internally defined variable I set up my jenkins job to take in the parameter payload and set its value to test\ntest.

My jenkins script is the following:

def hardset = "test\ntest"

echo "param:"
def cleanParam = jenkinsParam.replaceAll("[\\n\\t ]","Yes");
echo cleanParam

echo "----------"

echo "hardset:"
def cleanHardset = hardset.replaceAll("[\\n\\t ]","Yes");
echo cleanHardset


The output is (cleaned up to remove jenkins pipeline echos):

test\ntest

param:
test\ntest

----------

hardset:
testYestest


Why? What's different between reading in a jenkins parameter and setting one in the script body?

In practice, I'm trying to replace troublesome \n coming in from a lambda payload, but this is throwing a wrench in my plans.

doing something like def hardsetParam = jenkinsParam to set it in the script body doesn't seem to work either, sadly.

In response to a comment - doing echo jenkinsParam gives me test\ntest. To my eyes, it's identical to hardset.
It seems that the jenkinsParam is holding the output after escaping the special characters.
You are assuming that jenkinsParam = "test\ntest" and however it looks like it stores it as jenkinsParam = "test\\ntest"

See how it behaves if I use echo it these two different cases:

(I have tested this in groovy shell)

1st Case:

jenkinsParam = "test\ntest"
print jenkinsParam
test
test


** 2nd Case:**

jenkinsParam = "test\\ntest"
print jenkinsParam
test\ntest


In order to replace the payload which is stored in the jenkinsParam (2nd case behaviour), you need to replace the complete \\n from the string. Check the example below:

output = jenkinsParam.replaceAll('\\\\n', 'yes')
print output
testyestest