do_shortcode() doesn’t work if shortcode contained in variable, works if shortcode passed as string

Make sure that the string in $short variable is between square brakets, like [header]. If it’s not stored that way, make the call like this echo do_shortcode('['.$short.']');