sbool formatXYZ_quotedVars; static S formatXYZ(S pattern, L args) { ret join(formatXYZ(javaTok(pattern), args)); } // modifies tok! static L formatXYZ(L tok, L args) { for (int i = 1; i < l(tok); i += 2) { S t = tok.get(i); if (formatXYZ_quotedVars && isQuoted(t)) { int idx = formatXYZ_varToIndex(unquote(t))-1; if (idx >= 0 && l(args) > idx) tok.set(i, quote(args.get(idx))); } int idx = formatXYZ_varToIndex(t)-1; if (idx >= 0 && l(args) > idx) tok.set(i, args.get(idx)); } ret tok; } static S formatXYZ(S pattern, S... args) { ret formatXYZ(pattern, asList(args)); }