This file is echo.def, from which is created echo.c.It implements the builtin "echo" in Bash.Copyright (C) 1987-2002 Free Software Foundation, Inc.This file is part of GNU Bash, the Bourne Again SHell.Bash is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 2, or (at your option) any laterversion.Bash is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licensefor more details.You should have received a copy of the GNU General Public License alongwith Bash; see the file COPYING. If not, write to the Free SoftwareFoundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.$PRODUCES echo.c#include <config.h>#if defined (HAVE_UNISTD_H)# include <unistd.h>#endif#include "../bashansi.h"#include <stdio.h>#include "../shell.h"$BUILTIN echo$FUNCTION echo_builtin$DEPENDS_ON V9_ECHO$SHORT_DOC echo [-neE] [arg ...]Output the ARGs. If -n is specified, the trailing newline issuppressed. If the -e option is given, interpretation of thefollowing backslash-escaped characters is turned on:\a alert (bell)\b backspace\c suppress trailing newline\E escape character\f form feed\n new line\r carriage return\t horizontal tab\v vertical tab\\ backslash\num the character whose ASCII code is NUM (octal).You can explicitly turn off the interpretation of the above characterswith the -E option.$END$BUILTIN echo$FUNCTION echo_builtin$DEPENDS_ON !V9_ECHO$SHORT_DOC echo [-n] [arg ...]Output the ARGs. If -n is specified, the trailing newline is suppressed.$END#if defined (V9_ECHO)# define VALID_ECHO_OPTIONS "neE"#else /* !V9_ECHO */# define VALID_ECHO_OPTIONS "n"#endif /* !V9_ECHO *//* System V machines already have a /bin/sh with a v9 behaviour. Wegive Bash the identical behaviour for these machines so that theexisting system shells won't barf. Regrettably, the SUS v2 hasstandardized the Sys V echo behavior. This variable is externalso that we can have a `shopt' variable to control it at runtime. */#if defined (DEFAULT_ECHO_TO_XPG)int xpg_echo = 1;#elseint xpg_echo = 0;#endif /* DEFAULT_ECHO_TO_XPG *//* Print the words in LIST to standard output. If the first word is`-n', then don't print a trailing newline. We also support theecho syntax from Version 9 Unix systems. */intecho_builtin (list)WORD_LIST *list;{int display_return, do_v9, i, len;char *temp, *s;do_v9 = xpg_echo;display_return = 1;for (; list && (temp = list->word->word) && *temp == '-'; list = list->next){/* If it appears that we are handling options, then make sure thatall of the options specified are actually valid. Otherwise, thestring should just be echoed. */temp++;for (i = 0; temp[i]; i++){if (strchr (VALID_ECHO_OPTIONS, temp[i]) == 0)break;}/* echo - and echo -<nonopt> both mean to just echo the arguments. */if (*temp == 0 || temp[i])break;/* All of the options in TEMP are valid options to ECHO.Handle them. */while (i = *temp++){switch (i){case 'n':display_return = 0;break;#if defined (V9_ECHO)case 'e':do_v9 = 1;break;case 'E':do_v9 = 0;break;#endif /* V9_ECHO */default:goto just_echo; /* XXX */}}}just_echo:while (list){i = len = 0;temp = do_v9 ? ansicstr (list->word->word, STRLEN (list->word->word), 1, &i, &len): list->word->word;if (temp){if (do_v9){for (s = temp; len > 0; len--)putchar (*s++);}elseprintf ("%s", temp);#if defined (SunOS5)fflush (stdout); /* Fix for bug in SunOS 5.5 printf(3) */#endif}if (do_v9 && temp)free (temp);list = list->next;if (i){display_return = 0;break;}if (list)putchar(' ');}if (display_return)putchar ('\n');fflush (stdout);if (ferror (stdout)){clearerr (stdout);return (EXECUTION_FAILURE);}return (EXECUTION_SUCCESS);}