Recent post display using shortcode

You have missed the quotes in the_permalink().
Use following code

function my_recent_posts_shortcode($atts){
 $q = new WP_Query(
   array( 'orderby' => 'date', 'posts_per_page' => '4')
 );
$list ="";
while($q->have_posts()) : $q->the_post();
 echo '<div class="item">';
$title=get_the_title();
if ( has_post_thumbnail() ) {
 $list .= '<a class="single-image link-icon" href="'. get_permalink().'">'.the_post_thumbnail(array(300,200),array('alt' =>$title)).'</a>';
}
$list .= '<h6 class="title"><a href=".the_permalink()."><span>"'.the_title().'"</span></a></h6>';
echo '<div class="entry-body">';
$list .= wpe_excerpt('wpe_excerptlength_index', '').'<a class="button default color" href="'.the_permalink().'">Read More</a>';
echo '</div>';

 echo '</div>';
endwhile;

wp_reset_postdata();

return $list ;

}