#include #include #include #include extern char **environ; static int printvars(int len, char **names, char n_flag) { int ret = 0; for (int i = 0; i < len; i++) { char *val = getenv(names[i]); if (!val) { ret = 1; continue; } printf("%s%c", val, n_flag); } return ret; } int main(int argc, char **argv) { char n_flag = '\n'; int opt; while ((opt = getopt(argc, argv, "0")) != -1) { switch (opt) { case 'n': n_flag = '\0'; break; default: puts("printenv [var1 var2...]\n\t-0 NUL terminated output\n"); return 0; } } argv += optind; argc -= optind; if (argc == 0) { while (*environ) printf("%s%c", *environ++, n_flag); } else return printvars(argc, argv, n_flag); return 0; }