Index: src/wp-includes/formatting.php
===================================================================
--- src/wp-includes/formatting.php	(revision 36058)
+++ src/wp-includes/formatting.php	(working copy)
@@ -216,7 +216,7 @@
 
 	// Look for shortcodes and HTML elements.
 
-	preg_match_all( '@\[/?([^<>&/\[\]\x00-\x20]++)@', $text, $matches );
+	preg_match_all( '@\[/?([^<>&/\[\]\x00-\x20=]++)@', $text, $matches );
 	$tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] );
 	$found_shortcodes = ! empty( $tagnames );
 	$shortcode_regex = $found_shortcodes ? _get_wptexturize_shortcode_regex( $tagnames ) : '';
Index: src/wp-includes/shortcodes.php
===================================================================
--- src/wp-includes/shortcodes.php	(revision 36058)
+++ src/wp-includes/shortcodes.php	(working copy)
@@ -95,9 +95,9 @@
 		return;
 	}
 
-	if ( 0 !== preg_match( '@[<>&/\[\]\x00-\x20]@', $tag ) ) {
-		/* translators: %s: shortcode name */
-		$message = sprintf( __( 'Invalid shortcode name: %s. Do not use spaces or reserved characters: & / < > [ ]' ), $tag );
+	if ( 0 !== preg_match( '@[<>&/\[\]\x00-\x20=]@', $tag ) ) {
+		/* translators: 1: shortcode name, 2: space separated list of reserved characters */
+		$message = sprintf( __( 'Invalid shortcode name: %1$s. Do not use spaces or reserved characters: %2$s' ), $tag, '& / < > [ ] =' );
 		_doing_it_wrong( __FUNCTION__, $message, '4.4.0' );
 		return;
 	}
@@ -210,7 +210,7 @@
 		return $content;
 
 	// Find all registered tag names in $content.
-	preg_match_all( '@\[([^<>&/\[\]\x00-\x20]++)@', $content, $matches );
+	preg_match_all( '@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches );
 	$tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] );
 
 	if ( empty( $tagnames ) ) {
@@ -578,7 +578,7 @@
 		return $content;
 
 	// Find all registered tag names in $content.
-	preg_match_all( '@\[([^<>&/\[\]\x00-\x20]++)@', $content, $matches );
+	preg_match_all( '@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches );
 	$tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] );
 
 	if ( empty( $tagnames ) ) {
Index: tests/phpunit/tests/shortcode.php
===================================================================
--- tests/phpunit/tests/shortcode.php	(revision 36058)
+++ tests/phpunit/tests/shortcode.php	(working copy)
@@ -647,4 +647,14 @@
 
 	}
 
+	/**
+	 * @ticket 34939
+	 *
+	 * Test the (not recommended) [shortcode=XXX] format
+	 */
+	function test_unnamed_attribute() {
+		$out = do_shortcode('[dumptag=http://wordpress.com/]');
+		$expected = "0 = =http://wordpress.com\n";
+		$this->assertEquals($expected, $out);
+	}
 }
