diff --git a/src/os_unix.c b/src/os_unix.c
index 4a339f90a31f12365a3cca92e037668544cf33c6..c60ddafe5294bee12d057cdb8368035f072e1535 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -5126,10 +5126,11 @@ mch_expand_wildcards(num_pat, pat, num_file, file, flags)
 		else if (pat[i][j] == '\\' && pat[i][j + 1] != NUL)
 		{
 		    /* Remove a backslash, take char literally.  But keep
-		     * backslash before special character and inside
-		     * backticks. */
+		     * backslash inside backticks, before a special character
+		     * and before a backtick. */
 		    if (intick
-			  || vim_strchr(SHELL_SPECIAL, pat[i][j + 1]) != NULL)
+			  || vim_strchr(SHELL_SPECIAL, pat[i][j + 1]) != NULL
+			  || pat[i][j + 1] == '`')
 			*p++ = '\\';
 		    ++j;
 		}
@@ -5356,7 +5357,8 @@ mch_expand_wildcards(num_pat, pat, num_file, file, flags)
 	/* Space or NL separates */
 	if (shell_style == STYLE_ECHO || shell_style == STYLE_BT)
 	{
-	    while (!(shell_style == STYLE_ECHO && *p == ' ') && *p != '\n')
+	    while (!(shell_style == STYLE_ECHO && *p == ' ')
+						   && *p != '\n' && *p != NUL)
 		++p;
 	    if (p == buffer + len)		/* last entry */
 		*p = NUL;