parameters: (path)
return_statement: return res
docstring: Expand shell variables of the forms $var, ${var} and %var%.
  
      Unknown variables are left unchanged.
docstring_summary: Expand shell variables of the forms $var, ${var} and %var%.
docstring_tokens: Expand shell variables of the forms $var $ { var } and %var% .
function: def expandvars(path):
      """Expand shell variables of the forms $var, ${var} and %var%.
  
      Unknown variables are left unchanged."""
      if '$' not in path and '%' not in path:
          return path
      import string
      varchars = string.ascii_letters + string.digits + '_-'
      res = ''
      index = 0
      pathlen = len(path)
      while index < pathlen:
          c = path[index]
          if c == '\'':   # no expansion within single quotes
              path = path[index + 1:]
              pathlen = len(path)
              try:
                  index = path.index('\'')
                  res = res + '\'' + path[:index + 1]
              except ValueError:
                  res = res + path
                  index = pathlen - 1
          elif c == '%':  # variable or '%'
              if path[index + 1:index + 2] == '%':
                  res = res + c
                  index = index + 1
              else:
                  path = path[index+1:]
                  pathlen = len(path)
                  try:
                      index = path.index('%')
                  except ValueError:
                      res = res + '%' + path
                      index = pathlen - 1
                  else:
                      var = path[:index]
                      if var in os.environ:
                          res = res + os.environ[var]
                      else:
                          res = res + '%' + var + '%'
          elif c == '$':  # variable or '$$'
              if path[index + 1:index + 2] == '$':
                  res = res + c
                  index = index + 1
              elif path[index + 1:index + 2] == '{':
                  path = path[index+2:]
                  pathlen = len(path)
                  try:
                      index = path.index('}')
                      var = path[:index]
                      if var in os.environ:
                          res = res + os.environ[var]
                      else:
                          res = res + '${' + var + '}'
                  except ValueError:
                      res = res + '${' + path
                      index = pathlen - 1
              else:
                  var = ''
                  index = index + 1
                  c = path[index:index + 1]
                  while c != '' and c in varchars:
                      var = var + c
                      index = index + 1
                      c = path[index:index + 1]
                  if var in os.environ:
                      res = res + os.environ[var]
                  else:
                      res = res + '$' + var
                  if c != '':
                      index = index - 1
          else:
              res = res + c
          index = index + 1
      return res
function_tokens: def expandvars ( path ) : if '$' not in path and '%' not in path : return path import string varchars = string . ascii_letters + string . digits + '_-' res = '' index = 0 pathlen = len ( path ) while index < pathlen : c = path [ index ] if c == '\'' : # no expansion within single quotes path = path [ index + 1 : ] pathlen = len ( path ) try : index = path . index ( '\'' ) res = res + '\'' + path [ : index + 1 ] except ValueError : res = res + path index = pathlen - 1 elif c == '%' : # variable or '%' if path [ index + 1 : index + 2 ] == '%' : res = res + c index = index + 1 else : path = path [ index + 1 : ] pathlen = len ( path ) try : index = path . index ( '%' ) except ValueError : res = res + '%' + path index = pathlen - 1 else : var = path [ : index ] if var in os . environ : res = res + os . environ [ var ] else : res = res + '%' + var + '%' elif c == '$' : # variable or '$$' if path [ index + 1 : index + 2 ] == '$' : res = res + c index = index + 1 elif path [ index + 1 : index + 2 ] == '{' : path = path [ index + 2 : ] pathlen = len ( path ) try : index = path . index ( '}' ) var = path [ : index ] if var in os . environ : res = res + os . environ [ var ] else : res = res + '${' + var + '}' except ValueError : res = res + '${' + path index = pathlen - 1 else : var = '' index = index + 1 c = path [ index : index + 1 ] while c != '' and c in varchars : var = var + c index = index + 1 c = path [ index : index + 1 ] if var in os . environ : res = res + os . environ [ var ] else : res = res + '$' + var if c != '' : index = index - 1 else : res = res + c index = index + 1 return res