void		ft_export(char **cmd_line);

export

환경변수 출력


/*
** export명령어에 인자가 없는 경우
** 1. key를 정렬- (아스키코드 작은값부터)
** 2. declare -x key="value" 형태로 출력
*/

static void	print_export(void)
{
	t_env	*env;
	int		i;
	int		cnt;

	cnt = ft_arrsize(g_envs);
	if (search_env("OLDPWD") == NULL)
		cnt++;
	env = sort_env(get_key_value(cnt));
	i = -1;
	while (env[++i].key)
	{
		printf("declare -x %s", env[i].key);
		if (env[i].value != NULL)
			printf("=\\"%s\\"", env[i].value);
		printf("\\n");
	}
	printf("%d %d\\n", i, cnt);
}

<aside> ‼️ OLDPWD가 환경변수에 없는 경우가 있는데 없을 때에도 export를 하면 출력됨.

</aside>

환경변수 key, value로 나누기


static t_env	*get_key_value(int cnt)
{
	t_env	*env;
	int		i;

	env = (t_env *)malloc(sizeof(t_env) * (cnt + 1));
	i = -1;
	while (g_envs[++i])
	{
		env[i].key = get_key(g_envs[i]);
		env[i].value = search_env(env[i].key);
	}
	if (search_env("OLDPWD") == NULL)
	{
		env[i].key = ft_strdup("OLDPWD");
		env[i++].value = NULL;
	}
	env[i].key = NULL;
	return (env);
}

환경변수 추가 or 변경


static void	add_env(char **envs, char *key, char *new)
{
	char	*value;
	int		i;

	i = -1;
	while (envs[++i])
	{
		if (ft_strncmp(key, envs[i], ft_strlen(key)) == 0 &&
				envs[i][ft_strlen(key)] == '=')
		{
			free(envs[i]);
			break ;
		}
	}
	envs[i] = ft_strdup(new);
	if (i == ft_arrsize(envs))
		envs[++i] = NULL;
	free(key);
}