This file is test.def, from which is created test.c.It implements the builtin "test" 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 test.c$BUILTIN test$FUNCTION test_builtin$SHORT_DOC test [expr]Exits with a status of 0 (true) or 1 (false) depending onthe evaluation of EXPR. Expressions may be unary or binary. Unaryexpressions are often used to examine the status of a file. Thereare string operators as well, and numeric comparison operators.File operators:-a FILE True if file exists.-b FILE True if file is block special.-c FILE True if file is character special.-d FILE True if file is a directory.-e FILE True if file exists.-f FILE True if file exists and is a regular file.-g FILE True if file is set-group-id.-h FILE True if file is a symbolic link.-L FILE True if file is a symbolic link.-k FILE True if file has its `sticky' bit set.-p FILE True if file is a named pipe.-r FILE True if file is readable by you.-s FILE True if file exists and is not empty.-S FILE True if file is a socket.-t FD True if FD is opened on a terminal.-u FILE True if the file is set-user-id.-w FILE True if the file is writable by you.-x FILE True if the file is executable by you.-O FILE True if the file is effectively owned by you.-G FILE True if the file is effectively owned by your group.-N FILE True if the file has been modified since it was last read.FILE1 -nt FILE2 True if file1 is newer than file2 (according tomodification date).FILE1 -ot FILE2 True if file1 is older than file2.FILE1 -ef FILE2 True if file1 is a hard link to file2.String operators:-z STRING True if string is empty.-n STRINGSTRING True if string is not empty.STRING1 = STRING2True if the strings are equal.STRING1 != STRING2True if the strings are not equal.STRING1 < STRING2True if STRING1 sorts before STRING2 lexicographically.STRING1 > STRING2True if STRING1 sorts after STRING2 lexicographically.Other operators:-o OPTION True if the shell option OPTION is enabled.! EXPR True if expr is false.EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne,-lt, -le, -gt, or -ge.Arithmetic binary operators return true if ARG1 is equal, not-equal,less-than, less-than-or-equal, greater-than, or greater-than-or-equalthan ARG2.$END$BUILTIN [$DOCNAME test_bracket$FUNCTION test_builtin$SHORT_DOC [ arg... ]This is a synonym for the "test" builtin, but the lastargument must be a literal `]', to match the opening `['.$END#include <config.h>#if defined (HAVE_UNISTD_H)# ifdef _MINIX# include <sys/types.h># endif# include <unistd.h>#endif#include "../bashansi.h"#include "../shell.h"#include "../test.h"#include "common.h"extern char *this_command_name;/* TEST/[ builtin. */inttest_builtin (list)WORD_LIST *list;{char **argv;int argc, result;/* We let Matthew Bradburn and Kevin Braunsdorf's code do theactual test command. So turn the list of args into an arrayof strings, since that is what their code wants. */if (list == 0){if (this_command_name[0] == '[' && !this_command_name[1]){builtin_error ("missing `]'");return (EX_BADUSAGE);}return (EXECUTION_FAILURE);}argv = make_builtin_argv (list, &argc);result = test_command (argc, argv);free ((char *)argv);return (result);}