Index: src/wp-includes/shortcodes.php
===================================================================
--- src/wp-includes/shortcodes.php	(revision 32382)
+++ src/wp-includes/shortcodes.php	(working copy)
@@ -304,7 +304,7 @@
  */
 function shortcode_parse_atts($text) {
 	$atts = array();
-	$pattern = '/(\w+)\s*=\s*"([^"]*)"(?:\s|$)|(\w+)\s*=\s*\'([^\']*)\'(?:\s|$)|(\w+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';
+	$pattern = '/(\w+)\s*=\s*"([^"]*)"(?:\s|$)|(\w+)\s*=\s*\'([^\']*)\'(?:\s|$)|(\w+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|\'([^\']*)\'(?:\s|$)|(\S+)(?:\s|$)/';
 	$text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text);
 	if ( preg_match_all($pattern, $text, $match, PREG_SET_ORDER) ) {
 		foreach ($match as $m) {
@@ -316,8 +316,10 @@
 				$atts[strtolower($m[5])] = stripcslashes($m[6]);
 			elseif (isset($m[7]) && strlen($m[7]))
 				$atts[] = stripcslashes($m[7]);
-			elseif (isset($m[8]))
+			elseif (isset($m[8]) && strlen($m[8]))
 				$atts[] = stripcslashes($m[8]);
+			elseif (isset($m[9]))
+				$atts[] = stripcslashes($m[9]);
 		}
 	} else {
 		$atts = ltrim($text);
Index: tests/phpunit/tests/shortcode.php
===================================================================
--- tests/phpunit/tests/shortcode.php	(revision 32382)
+++ tests/phpunit/tests/shortcode.php	(working copy)
@@ -188,6 +188,26 @@
 		$this->assertEquals( 'test-shortcode-tag', $this->tagname );
 	}
 
+	/**
+	 * @ticket 32172
+	 */
+	function test_positional_atts_single_quotes() {
+		$out = do_shortcode("[test-shortcode-tag 'something in quotes' 'something else']");
+		$this->assertEquals( '', $out );
+		$this->assertEquals( array(0=>'something in quotes', 1=>'something else'), $this->atts );
+		$this->assertEquals( 'test-shortcode-tag', $this->tagname );
+	}
+
+	/**
+	 * @ticket 32172
+	 */
+	function test_positional_atts_mixed_quotes() {
+		$out = do_shortcode("[test-shortcode-tag 'something in quotes' \"something else\" 123 foo bar='baz' example=\"test\" ]");
+		$this->assertEquals( '', $out );
+		$this->assertEquals( array(0=>'something in quotes', 1=>'something else', 2 => '123', 3 => 'foo', 'bar' => 'baz', 'example' => 'test'), $this->atts );
+		$this->assertEquals( 'test-shortcode-tag', $this->tagname );
+	}
+
 	function test_footag_default() {
 		$out = do_shortcode('[footag]');
 		$this->assertEquals('foo = ', $out);
