#include #include #include #include extern char **environ; static void usage(void) { fprintf(stderr, "usage: printenv [variable]\n"); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { int i; char **ep; int ch; size_t len; char *p; while ((ch = getopt(argc, argv, "")) != -1) { switch (ch) { case '?': default: usage(); } } argc -= optind; argv += optind; if (!argc) { for (ep = environ; *ep; ep++) printf("%s\n", *ep); return EXIT_SUCCESS; } else { for (i = 0; argv[i]; i++) { len = strlen(argv[i]); for (ep = environ; *ep; ep++) { if (!memcmp(*ep, argv[i], len)) { p = *ep + len; printf("%s\n", *p ? p + 1 : p); } } } } return EXIT_SUCCESS; }