diff --git a/tools/vsh.c b/tools/vsh.c
index 73ec007e56..68f3cd99f9 100644
--- a/tools/vsh.c
+++ b/tools/vsh.c
@@ -3493,7 +3493,10 @@ cmdComplete(vshControl *ctl, const vshCmd *cmd)
     if (!(matches = vshReadlineCompletion(arg, 0, 0)))
         goto cleanup;
 
-    for (iter = matches; *iter; iter++)
+    /* According to rl_completion_matches documentation, the
+     * first entry in @matches array is some dummy substitution
+     * string for @arg. Skip it. */
+    for (iter = &matches[1]; *iter; iter++)
         printf("%s\n", *iter);
 
     ret = true;