Sim, foi um bug em versões antigas do bash
corrigido no bash-4.2.14
E aqui está o commit que faz o problema desaparecer ; faça do que você quiser.
O que é CTLESC
? Está definido em syntax.h
as #define CTLESC '
, veja você. É algum tipo de fuga interna de alguma forma envolvida na expansão. Parece que o erro pode ser que o seu \x01
1'CTLESC
data está sendo interpretado como se fosse um %code% gerado internamente ou algo assim.
commit 25db9a70d4c2ba5c43d4167f231bdd8d760d5a06
Author: Chet Ramey <[email protected]>
Date: Tue Nov 22 20:02:46 2011 -0500
Bash-4.2 patch 14
diff --git a/patchlevel.h b/patchlevel.h
index 636be1c..04b423b 100644
--- a/patchlevel.h
+++ b/patchlevel.h
@@ -25,6 +25,6 @@
regexp '^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
looks for to find the patch level (for the sccs version string). */
-#define PATCHLEVEL 13
+#define PATCHLEVEL 14
#endif /* _PATCHLEVEL_H_ */
diff --git a/pathexp.c b/pathexp.c
index 42f21e4..f239956 100644
--- a/pathexp.c
+++ b/pathexp.c
@@ -196,7 +196,7 @@ quote_string_for_globbing (pathname, qflags)
{
if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/')
continue;
- if ((qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0)
+ if (pathname[i+1] != CTLESC && (qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0)
continue;
temp[j++] = '\';
i++;