def _shell_replace_vars(cmd, local_vars):
spans = []
replacements = []
for match in _dollar_var_re.finditer(cmd):
varname = match.group(1)
if varname.isdigit():
# $1, $2 for sys.argv, just like bash
value = sys.argv[int(varname)]
elif varname == '#':
value = len(sys.argv) - 1
elif varname == '@':
value = ' '.join(map(shlex.quote, sys.argv[1:]))
else:
assert is_variable_name(varname), 'not a valid var name: ' + varname
if not varname in local_vars:
continue
value = local_vars[varname]
if isinstance(value, str):
value = shlex.quote(value)
else:
value = str(value)
spans.append(match.span())
replacements.append(value)
return _replace_n(cmd, spans, replacements)
评论列表
文章目录