Bash-4.3 distribution sources and documentation
[platform/upstream/bash.git] / support / printenv.c
1 /* printenv -- minimal clone of BSD printenv(1).
2
3    usage: printenv [varname]
4
5    Chet Ramey
6    chet@po.cwru.edu
7 */
8
9 /* Copyright (C) 1997-2002 Free Software Foundation, Inc.
10
11    This file is part of GNU Bash, the Bourne Again SHell.
12
13    Bash is free software: you can redistribute it and/or modify
14    it under the terms of the GNU General Public License as published by
15    the Free Software Foundation, either version 3 of the License, or
16    (at your option) any later version.
17
18    Bash is distributed in the hope that it will be useful,
19    but WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21    GNU General Public License for more details.
22
23    You should have received a copy of the GNU General Public License
24    along with Bash.  If not, see <http://www.gnu.org/licenses/>.
25 */
26
27 #if defined (HAVE_CONFIG_H)
28 #  include  <config.h>
29 #endif
30
31 #include "bashansi.h"
32 #include <stdio.h>              /* puts */
33
34 extern char **environ;
35
36 int
37 main (argc, argv) 
38      int argc;
39      char **argv;
40 {
41   register char **envp, *eval;
42   int len;
43
44   argv++;
45   argc--;
46
47   /* printenv */
48   if (argc == 0)
49     {
50       for (envp = environ; *envp; envp++)
51         puts (*envp);
52       exit (0);
53     }
54
55   /* printenv varname */
56   len = strlen (*argv);
57   for (envp = environ; *envp; envp++)
58     {
59       if (**argv == **envp && strncmp (*envp, *argv, len) == 0)
60         {
61           eval = *envp + len;
62           /* If the environment variable doesn't have an `=', ignore it. */
63           if (*eval == '=')
64             {
65               puts (eval + 1);
66               exit (0);
67             }
68         }
69     }
70   exit (1);
71 }
72