Index: src/wp-includes/shortcodes.php
===================================================================
--- src/wp-includes/shortcodes.php	(revision 46065)
+++ src/wp-includes/shortcodes.php	(working copy)
@@ -177,6 +177,23 @@
 function do_shortcode( $content, $ignore_html = false ) {
 	global $shortcode_tags;
 
+	/**
+	 * Filters whether to continue with do_shortcode.
+	 *
+	 * Passing a truthy value to the filter will effectively short-circuit the
+	 * shortcode search & replace process, returning that value instead.
+	 *
+	 * @since
+	 *
+	 * @param bool|string $return Short-circuit return value. Either false or the value to replace the content with.
+	 * @param string $content Content to search for shortcodes.
+	 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
+	 */
+	$return = apply_filters( 'pre_do_shortcode', false, $content, $ignore_html );
+	if ( false !== $return ) {
+		return $return;
+	}
+
 	if ( false === strpos( $content, '[' ) ) {
 		return $content;
 	}
