diff --git a/builtins/src/main/java/org/jline/builtins/ConsoleEngineImpl.java b/builtins/src/main/java/org/jline/builtins/ConsoleEngineImpl.java index a298d14ac..628e8c2f4 100644 --- a/builtins/src/main/java/org/jline/builtins/ConsoleEngineImpl.java +++ b/builtins/src/main/java/org/jline/builtins/ConsoleEngineImpl.java @@ -269,8 +269,16 @@ public Map scripts() { @Override public Object[] expandParameters(String[] args) throws Exception { Object[] out = new Object[args.length]; + String regexPath = "(.*)\\$\\{(.*?)\\}(/.*)"; for (int i = 0; i < args.length; i++) { - if (args[i].startsWith("${")) { + if (args[i].matches(regexPath)) { + Matcher matcher = Pattern.compile(regexPath).matcher(args[i]); + if (matcher.find()) { + out[i] = matcher.group(1) + (String)engine.get(matcher.group(2)) + matcher.group(3); + } else { + throw new IllegalArgumentException(); + } + } else if (args[i].startsWith("${")) { out[i] = engine.execute(expandName(args[i])); } else if (args[i].startsWith("$")) { out[i] = engine.get(expandName(args[i])); @@ -536,7 +544,7 @@ private void internalExecute() throws Exception { line = line.replaceAll("\\$@", expandToList(args)); line = line.replaceAll("\\s\\$\\d\\b", ""); line = line.replaceAll("\\$\\{\\d+\\}", ""); - Matcher matcher=Pattern.compile("\\$\\{\\d+:-(.*?)\\}").matcher(line); + Matcher matcher = Pattern.compile("\\$\\{\\d+:-(.*?)\\}").matcher(line); if (matcher.find()) { line = matcher.replaceAll("'$1'"); }