While @J Quest provided an adequate answer, I'd like to elaborate a little bit. Generally speaking, WordPress has two types of post variable functions: get_ functions and the_ functions.
get_ functions, such as get_the_content() or get_the_ID()will return the desired information, which must then be manipulated and printed to the page. Some examples:
$content = get_the_content();
$content = apply_filters( 'the_content', $content );
$content = str_replace( 'foo', 'bar', $content );
echo 'Post #'. get_the_ID() . $content;
the_ functions, such as the_content() and the_ID() actually echo the returned value, and if applicable will apply the "default filters" for the appropriate values. These functions don't need to be echoed.
echo get_the_ID();
is functionally the same as
the_ID();
If you look at the docs for the_ID() you'll see it literally just outputs the value of get_the_ID(). From the source:
function the_ID() {
    echo get_the_ID();
}
In that vein, if you try and set the_ functions as a variable, you'll leave a trail of echoed variables throughout the page.
$id = the_ID();
echo 'Post ID: '.$id;
will output:
123Post ID: 123
To use get_the_content() and get shortcodes to run, you'll either need to run it through the do_shortcode() function, or better yet the_content filter.
$content = get_the_content();
echo do_shortcode( $content );
// Or:    
echo apply_filters( 'the_content', $content );
If you just need to spit out post content in a template, without any manipulation, you're typically better off with (no echo or echo short tag):
the_content();