/// <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);
        }