red = 'file_red.tif'
# etc
"red;green;nir"
isn't using the contents of the variables red, green and nir, but the characters r, e, d, and so on, which is not what you want.
There are sevearal ways to join the contents from a number of strings into a new string. My personal favorit is the str.join method, which is very handy when you have your strings to join in a tuple or list:
my_strings = (red, green, nir) # first put them in a tuple
joined_strings = ';'.join(my_strings) # delimited by ;
Another possibility is to use string formatting:
joined_strings = '%s;%s;%s' % (red, green, nir)
And yet another way is to use string concatenation as ESRI do in most of their samples:
joined_strings = red + ';' + green + ';' + 'nir'
Personally I like the first two, and don't like last. I think concatenation makes the code hard to read.