Return function results within shortcode

This is correct (I just had file versioning issues):

        <?php


        function say_sup(){
        return 'sup';
        }

        add_shortcode( 'sup_shortcode', 'register_sup_shortcode' );
        function register_sup_shortcode( $atts, $content = null) {


        $sup = say_sup();
        return $sup;


        }

        ?>

This is not correct – and there would be little purpose in trying to make something like this work, if the above worked:

        <?php


        function say_sup(){
            $sup = 'sup';
            echo $sup;
            var_dump( $sup );
        }


        add_action( 'say_sup_now', 'say_sup', 1 );


        add_shortcode( 'sup_shortcode', 'register_sup_shortcode' );
        function register_sup_shortcode( $atts, $content = null) {


        do_action( 'say_sup_now' );


        }

        ?>