Index: trunk/Ohana/src/opihi/lib.shell/string.c
===================================================================
--- trunk/Ohana/src/opihi/lib.shell/string.c	(revision 2598)
+++ trunk/Ohana/src/opihi/lib.shell/string.c	(revision 6424)
@@ -94,5 +94,5 @@
 char *thisvar (char *string) {
 
-  int i;
+  int i, start;
   char *word;
 
@@ -100,7 +100,12 @@
   if (string[0] != '$') return ((char *) NULL);
 
-  for (i = 1; ISVAR(string[i]); i++);
-  if (i == 1) return ((char *) NULL);
-
+  /* special case $?name : check that name is valid */
+  start = 1;
+  if (string[1] == '?') start = 2;
+
+  for (i = start; ISVAR(string[i]); i++);
+  if (i == start) return ((char *) NULL);
+
+  /* the ? is part of the variable */
   word = strncreate (&string[1], i - 1);
   return (word);
@@ -207,11 +212,15 @@
 char *aftervar (char *string) {
 
-  int i, j;
+  int i, j, start;
 
   if (string == (char *) NULL) return ((char *) NULL);
   if (string[0] != '$') return ((char *) NULL);
 
-  for (i = 1; ISVAR(string[i]); i++);
-  if (i == 1) return ((char *) NULL);
+  /* special case: $?name : test only name */
+  start = 1;
+  if (string[1] == '?') start = 2;
+
+  for (i = start; ISVAR(string[i]); i++);
+  if (i == start) return ((char *) NULL);
 
   for (j = i; whitespace (string[j]); j++);
