/// <summary> /// Expands any Unix-style environment variables. /// </summary> /// <param name="commandLine">The command-line to expand.</param> private List <string> ExpandCommandLine(IEnumerable <ArgBase> commandLine) { var result = new List <string>(); foreach (var part in commandLine) { switch (part) { case Arg arg: result.Add(OSUtils.ExpandVariables(arg.Value, _startInfo.EnvironmentVariables)); break; case ForEachArgs forEach: string valueToSplit = _startInfo.EnvironmentVariables[forEach.ItemFrom]; if (!string.IsNullOrEmpty(valueToSplit)) { var items = valueToSplit.Split( new[] { forEach.Separator ?? Path.PathSeparator.ToString(CultureInfo.InvariantCulture) }, StringSplitOptions.None); foreach (string item in items) { _startInfo.EnvironmentVariables["item"] = item; result.AddRange(forEach.Arguments.Select(arg => OSUtils.ExpandVariables(arg.Value, _startInfo.EnvironmentVariables))); } _startInfo.EnvironmentVariables.Remove("item"); } break; default: throw new NotSupportedException($"Unknown command-line part: {part}"); } } return(result); }