xref: /freebsd/bin/test/test.1 (revision 90aea514c6249118e880d75972d063362f4bf492)
19ddb49cbSWarner Losh.\"-
24b88c807SRodney W. Grimes.\" Copyright (c) 1991, 1993
34b88c807SRodney W. Grimes.\"	The Regents of the University of California.  All rights reserved.
44b88c807SRodney W. Grimes.\"
54b88c807SRodney W. Grimes.\" This code is derived from software contributed to Berkeley by
64b88c807SRodney W. Grimes.\" the Institute of Electrical and Electronics Engineers, Inc.
74b88c807SRodney W. Grimes.\"
84b88c807SRodney W. Grimes.\" Redistribution and use in source and binary forms, with or without
94b88c807SRodney W. Grimes.\" modification, are permitted provided that the following conditions
104b88c807SRodney W. Grimes.\" are met:
114b88c807SRodney W. Grimes.\" 1. Redistributions of source code must retain the above copyright
124b88c807SRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer.
134b88c807SRodney W. Grimes.\" 2. Redistributions in binary form must reproduce the above copyright
144b88c807SRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer in the
154b88c807SRodney W. Grimes.\"    documentation and/or other materials provided with the distribution.
16*fbbd9655SWarner Losh.\" 3. Neither the name of the University nor the names of its contributors
174b88c807SRodney W. Grimes.\"    may be used to endorse or promote products derived from this software
184b88c807SRodney W. Grimes.\"    without specific prior written permission.
194b88c807SRodney W. Grimes.\"
204b88c807SRodney W. Grimes.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
214b88c807SRodney W. Grimes.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
224b88c807SRodney W. Grimes.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
234b88c807SRodney W. Grimes.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
244b88c807SRodney W. Grimes.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
254b88c807SRodney W. Grimes.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
264b88c807SRodney W. Grimes.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
274b88c807SRodney W. Grimes.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
284b88c807SRodney W. Grimes.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
294b88c807SRodney W. Grimes.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
304b88c807SRodney W. Grimes.\" SUCH DAMAGE.
314b88c807SRodney W. Grimes.\"
322bb154d9SSevan Janiyan.Dd October 5, 2016
334b88c807SRodney W. Grimes.Dt TEST 1
344b88c807SRodney W. Grimes.Os
354b88c807SRodney W. Grimes.Sh NAME
36717a08b6SSheldon Hearn.Nm test ,
37717a08b6SSheldon Hearn.Nm \&[
384b88c807SRodney W. Grimes.Nd condition evaluation utility
394b88c807SRodney W. Grimes.Sh SYNOPSIS
40be8b1497SRuslan Ermilov.Nm
414b88c807SRodney W. Grimes.Ar expression
42238fe5f7SRuslan Ermilov.Nm \&[
4335471bf8SJoel Dahl.Ar expression Cm \&]
444b88c807SRodney W. Grimes.Sh DESCRIPTION
454b88c807SRodney W. GrimesThe
46be8b1497SRuslan Ermilov.Nm
474b88c807SRodney W. Grimesutility evaluates the expression and, if it evaluates
484b88c807SRodney W. Grimesto true, returns a zero (true) exit status; otherwise
494b88c807SRodney W. Grimesit returns 1 (false).
507eb5016aSRuslan ErmilovIf there is no expression,
517eb5016aSRuslan Ermilov.Nm
527eb5016aSRuslan Ermilovalso
534b88c807SRodney W. Grimesreturns 1 (false).
544b88c807SRodney W. Grimes.Pp
554b88c807SRodney W. GrimesAll operators and flags are separate arguments to the
56be8b1497SRuslan Ermilov.Nm
574b88c807SRodney W. Grimesutility.
584b88c807SRodney W. Grimes.Pp
594b88c807SRodney W. GrimesThe following primaries are used to construct expression:
60717a08b6SSheldon Hearn.Bl -tag -width Ar
614b88c807SRodney W. Grimes.It Fl b Ar file
624b88c807SRodney W. GrimesTrue if
634b88c807SRodney W. Grimes.Ar file
644b88c807SRodney W. Grimesexists and is a block special
654b88c807SRodney W. Grimesfile.
664b88c807SRodney W. Grimes.It Fl c Ar file
674b88c807SRodney W. GrimesTrue if
684b88c807SRodney W. Grimes.Ar file
694b88c807SRodney W. Grimesexists and is a character
704b88c807SRodney W. Grimesspecial file.
714b88c807SRodney W. Grimes.It Fl d Ar file
724b88c807SRodney W. GrimesTrue if
734b88c807SRodney W. Grimes.Ar file
744b88c807SRodney W. Grimesexists and is a directory.
754b88c807SRodney W. Grimes.It Fl e Ar file
764b88c807SRodney W. GrimesTrue if
774b88c807SRodney W. Grimes.Ar file
784b88c807SRodney W. Grimesexists (regardless of type).
794b88c807SRodney W. Grimes.It Fl f Ar file
804b88c807SRodney W. GrimesTrue if
814b88c807SRodney W. Grimes.Ar file
824b88c807SRodney W. Grimesexists and is a regular file.
834b88c807SRodney W. Grimes.It Fl g Ar file
844b88c807SRodney W. GrimesTrue if
854b88c807SRodney W. Grimes.Ar file
864b88c807SRodney W. Grimesexists and its set group ID flag
874b88c807SRodney W. Grimesis set.
884b88c807SRodney W. Grimes.It Fl h Ar file
894b88c807SRodney W. GrimesTrue if
904b88c807SRodney W. Grimes.Ar file
914b88c807SRodney W. Grimesexists and is a symbolic link.
92717a08b6SSheldon HearnThis operator is retained for compatibility with previous versions of
93bef84d6bSSheldon Hearnthis program.
94bef84d6bSSheldon HearnDo not rely on its existence; use
95717a08b6SSheldon Hearn.Fl L
96717a08b6SSheldon Hearninstead.
97717a08b6SSheldon Hearn.It Fl k Ar file
98717a08b6SSheldon HearnTrue if
99717a08b6SSheldon Hearn.Ar file
100717a08b6SSheldon Hearnexists and its sticky bit is set.
1014b88c807SRodney W. Grimes.It Fl n Ar string
1024b88c807SRodney W. GrimesTrue if the length of
1034b88c807SRodney W. Grimes.Ar string
1044b88c807SRodney W. Grimesis nonzero.
1054b88c807SRodney W. Grimes.It Fl p Ar file
1064b88c807SRodney W. GrimesTrue if
1074b88c807SRodney W. Grimes.Ar file
1084b88c807SRodney W. Grimesis a named pipe
109c4d9468eSRuslan Ermilov.Pq Tn FIFO .
1104b88c807SRodney W. Grimes.It Fl r Ar file
1114b88c807SRodney W. GrimesTrue if
112c263cc21SPhilippe Charnier.Ar file
113c263cc21SPhilippe Charnierexists and is readable.
1144b88c807SRodney W. Grimes.It Fl s Ar file
1154b88c807SRodney W. GrimesTrue if
1164b88c807SRodney W. Grimes.Ar file
1174b88c807SRodney W. Grimesexists and has a size greater
1184b88c807SRodney W. Grimesthan zero.
11946c128b5SDima Dorfman.It Fl t Ar file_descriptor
1204b88c807SRodney W. GrimesTrue if the file whose file descriptor number
1214b88c807SRodney W. Grimesis
1224b88c807SRodney W. Grimes.Ar file_descriptor
123717a08b6SSheldon Hearnis open and is associated with a terminal.
1244b88c807SRodney W. Grimes.It Fl u Ar file
1254b88c807SRodney W. GrimesTrue if
1264b88c807SRodney W. Grimes.Ar file
1274b88c807SRodney W. Grimesexists and its set user ID flag
1284b88c807SRodney W. Grimesis set.
1294b88c807SRodney W. Grimes.It Fl w Ar file
1304b88c807SRodney W. GrimesTrue if
1314b88c807SRodney W. Grimes.Ar file
1324b88c807SRodney W. Grimesexists and is writable.
1334b88c807SRodney W. GrimesTrue
1344b88c807SRodney W. Grimesindicates only that the write flag is on.
1354b88c807SRodney W. GrimesThe file is not writable on a read-only file
1364b88c807SRodney W. Grimessystem even if this test indicates true.
1374b88c807SRodney W. Grimes.It Fl x Ar file
1384b88c807SRodney W. GrimesTrue if
1394b88c807SRodney W. Grimes.Ar file
1404b88c807SRodney W. Grimesexists and is executable.
1414b88c807SRodney W. GrimesTrue
1424b88c807SRodney W. Grimesindicates only that the execute flag is on.
1434b88c807SRodney W. GrimesIf
1444b88c807SRodney W. Grimes.Ar file
1454b88c807SRodney W. Grimesis a directory, true indicates that
1464b88c807SRodney W. Grimes.Ar file
1474b88c807SRodney W. Grimescan be searched.
1484b88c807SRodney W. Grimes.It Fl z Ar string
1494b88c807SRodney W. GrimesTrue if the length of
1504b88c807SRodney W. Grimes.Ar string
1514b88c807SRodney W. Grimesis zero.
152717a08b6SSheldon Hearn.It Fl L Ar file
153717a08b6SSheldon HearnTrue if
154717a08b6SSheldon Hearn.Ar file
155717a08b6SSheldon Hearnexists and is a symbolic link.
156717a08b6SSheldon Hearn.It Fl O Ar file
157717a08b6SSheldon HearnTrue if
158717a08b6SSheldon Hearn.Ar file
159717a08b6SSheldon Hearnexists and its owner matches the effective user id of this process.
160717a08b6SSheldon Hearn.It Fl G Ar file
161717a08b6SSheldon HearnTrue if
162717a08b6SSheldon Hearn.Ar file
163717a08b6SSheldon Hearnexists and its group matches the effective group id of this process.
164717a08b6SSheldon Hearn.It Fl S Ar file
165717a08b6SSheldon HearnTrue if
166717a08b6SSheldon Hearn.Ar file
167717a08b6SSheldon Hearnexists and is a socket.
168717a08b6SSheldon Hearn.It Ar file1 Fl nt Ar file2
169f19825afSJilles TjoelkerTrue if
170717a08b6SSheldon Hearn.Ar file1
171f19825afSJilles Tjoelkerexists and is newer than
172717a08b6SSheldon Hearn.Ar file2 .
173717a08b6SSheldon Hearn.It Ar file1 Fl ot Ar file2
174f19825afSJilles TjoelkerTrue if
175717a08b6SSheldon Hearn.Ar file1
176f19825afSJilles Tjoelkerexists and is older than
177717a08b6SSheldon Hearn.Ar file2 .
178717a08b6SSheldon Hearn.It Ar file1 Fl ef Ar file2
179717a08b6SSheldon HearnTrue if
180717a08b6SSheldon Hearn.Ar file1
181717a08b6SSheldon Hearnand
182717a08b6SSheldon Hearn.Ar file2
183717a08b6SSheldon Hearnexist and refer to the same file.
1844b88c807SRodney W. Grimes.It Ar string
1854b88c807SRodney W. GrimesTrue if
1864b88c807SRodney W. Grimes.Ar string
1874b88c807SRodney W. Grimesis not the null
1884b88c807SRodney W. Grimesstring.
1897eb5016aSRuslan Ermilov.It Ar s1 Cm = Ar s2
1904b88c807SRodney W. GrimesTrue if the strings
1917eb5016aSRuslan Ermilov.Ar s1
1924b88c807SRodney W. Grimesand
1937eb5016aSRuslan Ermilov.Ar s2
1944b88c807SRodney W. Grimesare identical.
1957eb5016aSRuslan Ermilov.It Ar s1 Cm != Ar s2
1964b88c807SRodney W. GrimesTrue if the strings
1977eb5016aSRuslan Ermilov.Ar s1
1984b88c807SRodney W. Grimesand
1997eb5016aSRuslan Ermilov.Ar s2
2004b88c807SRodney W. Grimesare not identical.
2017eb5016aSRuslan Ermilov.It Ar s1 Cm < Ar s2
202717a08b6SSheldon HearnTrue if string
2037eb5016aSRuslan Ermilov.Ar s1
204717a08b6SSheldon Hearncomes before
2057eb5016aSRuslan Ermilov.Ar s2
206ee70653eSTim J. Robbinsbased on the binary value of their characters.
2077eb5016aSRuslan Ermilov.It Ar s1 Cm > Ar s2
208717a08b6SSheldon HearnTrue if string
2097eb5016aSRuslan Ermilov.Ar s1
210717a08b6SSheldon Hearncomes after
2117eb5016aSRuslan Ermilov.Ar s2
212ee70653eSTim J. Robbinsbased on the binary value of their characters.
2137eb5016aSRuslan Ermilov.It Ar n1 Fl eq Ar n2
2144b88c807SRodney W. GrimesTrue if the integers
2157eb5016aSRuslan Ermilov.Ar n1
2164b88c807SRodney W. Grimesand
2177eb5016aSRuslan Ermilov.Ar n2
2184b88c807SRodney W. Grimesare algebraically
2194b88c807SRodney W. Grimesequal.
2207eb5016aSRuslan Ermilov.It Ar n1 Fl ne Ar n2
2214b88c807SRodney W. GrimesTrue if the integers
2227eb5016aSRuslan Ermilov.Ar n1
2234b88c807SRodney W. Grimesand
2247eb5016aSRuslan Ermilov.Ar n2
2254b88c807SRodney W. Grimesare not
2264b88c807SRodney W. Grimesalgebraically equal.
2277eb5016aSRuslan Ermilov.It Ar n1 Fl gt Ar n2
2284b88c807SRodney W. GrimesTrue if the integer
2297eb5016aSRuslan Ermilov.Ar n1
2304b88c807SRodney W. Grimesis algebraically
2314b88c807SRodney W. Grimesgreater than the integer
2327eb5016aSRuslan Ermilov.Ar n2 .
2337eb5016aSRuslan Ermilov.It Ar n1 Fl ge Ar n2
2344b88c807SRodney W. GrimesTrue if the integer
2357eb5016aSRuslan Ermilov.Ar n1
2364b88c807SRodney W. Grimesis algebraically
2374b88c807SRodney W. Grimesgreater than or equal to the integer
2387eb5016aSRuslan Ermilov.Ar n2 .
2397eb5016aSRuslan Ermilov.It Ar n1 Fl lt Ar n2
2404b88c807SRodney W. GrimesTrue if the integer
2417eb5016aSRuslan Ermilov.Ar n1
2424b88c807SRodney W. Grimesis algebraically less
2434b88c807SRodney W. Grimesthan the integer
2447eb5016aSRuslan Ermilov.Ar n2 .
2457eb5016aSRuslan Ermilov.It Ar n1 Fl le Ar n2
2464b88c807SRodney W. GrimesTrue if the integer
2477eb5016aSRuslan Ermilov.Ar n1
2484b88c807SRodney W. Grimesis algebraically less
2494b88c807SRodney W. Grimesthan or equal to the integer
2507eb5016aSRuslan Ermilov.Ar n2 .
2514b88c807SRodney W. Grimes.El
2524b88c807SRodney W. Grimes.Pp
253593cc6f3SYaroslav TykhiyIf
254593cc6f3SYaroslav Tykhiy.Ar file
255593cc6f3SYaroslav Tykhiyis a symbolic link,
256593cc6f3SYaroslav Tykhiy.Nm
257593cc6f3SYaroslav Tykhiywill fully dereference it and then evaluate the expression
258593cc6f3SYaroslav Tykhiyagainst the file referenced, except for the
259593cc6f3SYaroslav Tykhiy.Fl h
260593cc6f3SYaroslav Tykhiyand
261593cc6f3SYaroslav Tykhiy.Fl L
262593cc6f3SYaroslav Tykhiyprimaries.
263593cc6f3SYaroslav Tykhiy.Pp
2644b88c807SRodney W. GrimesThese primaries can be combined with the following operators:
2654b88c807SRodney W. Grimes.Bl -tag -width Ar
2664b88c807SRodney W. Grimes.It Cm \&! Ar expression
2674b88c807SRodney W. GrimesTrue if
2684b88c807SRodney W. Grimes.Ar expression
2694b88c807SRodney W. Grimesis false.
2704b88c807SRodney W. Grimes.It Ar expression1 Fl a Ar expression2
2714b88c807SRodney W. GrimesTrue if both
2724b88c807SRodney W. Grimes.Ar expression1
2734b88c807SRodney W. Grimesand
2744b88c807SRodney W. Grimes.Ar expression2
2754b88c807SRodney W. Grimesare true.
2764b88c807SRodney W. Grimes.It Ar expression1 Fl o Ar expression2
2774b88c807SRodney W. GrimesTrue if either
2784b88c807SRodney W. Grimes.Ar expression1
2794b88c807SRodney W. Grimesor
2804b88c807SRodney W. Grimes.Ar expression2
2814b88c807SRodney W. Grimesare true.
282c68e12a6SJilles Tjoelker.It Cm \&( Ar expression Cm \&)
2834b88c807SRodney W. GrimesTrue if expression is true.
2844b88c807SRodney W. Grimes.El
2854b88c807SRodney W. Grimes.Pp
2864b88c807SRodney W. GrimesThe
2874b88c807SRodney W. Grimes.Fl a
2884b88c807SRodney W. Grimesoperator has higher precedence than the
2894b88c807SRodney W. Grimes.Fl o
2904b88c807SRodney W. Grimesoperator.
291d90c5c4aSAkinori MUSHA.Pp
292d90c5c4aSAkinori MUSHASome shells may provide a builtin
293d90c5c4aSAkinori MUSHA.Nm
294d90c5c4aSAkinori MUSHAcommand which is similar or identical to this utility.
295d90c5c4aSAkinori MUSHAConsult the
296d90c5c4aSAkinori MUSHA.Xr builtin 1
297d90c5c4aSAkinori MUSHAmanual page.
2984b88c807SRodney W. Grimes.Sh GRAMMAR AMBIGUITY
2994b88c807SRodney W. GrimesThe
300be8b1497SRuslan Ermilov.Nm
301eccea571SRuslan Ermilovgrammar is inherently ambiguous.
3025512804bSRebecca CranIn order to assure a degree of consistency,
3034b88c807SRodney W. Grimesthe cases described in the
3044b88c807SRodney W. Grimes.St -p1003.2 ,
3054b88c807SRodney W. Grimessection D11.2/4.62.4, standard
3064b88c807SRodney W. Grimesare evaluated consistently according to the rules specified in the
307eccea571SRuslan Ermilovstandards document.
308eccea571SRuslan ErmilovAll other cases are subject to the ambiguity in the
3094b88c807SRodney W. Grimescommand semantics.
3102f67f12eSJilles Tjoelker.Pp
3112f67f12eSJilles TjoelkerIn particular, only expressions containing
3122f67f12eSJilles Tjoelker.Fl a ,
3132f67f12eSJilles Tjoelker.Fl o ,
3142f67f12eSJilles Tjoelker.Cm \&(
3152f67f12eSJilles Tjoelkeror
3162f67f12eSJilles Tjoelker.Cm \&)
3172f67f12eSJilles Tjoelkercan be ambiguous.
3188465a404SDaniel Gerzo.Sh EXIT STATUS
3194b88c807SRodney W. GrimesThe
320be8b1497SRuslan Ermilov.Nm
3214b88c807SRodney W. Grimesutility exits with one of the following values:
3227eb5016aSRuslan Ermilov.Bl -tag -width indent
3234b88c807SRodney W. Grimes.It 0
3244b88c807SRodney W. Grimesexpression evaluated to true.
3254b88c807SRodney W. Grimes.It 1
3264b88c807SRodney W. Grimesexpression evaluated to false or expression was
3274b88c807SRodney W. Grimesmissing.
3284b88c807SRodney W. Grimes.It >1
3294b88c807SRodney W. GrimesAn error occurred.
3304b88c807SRodney W. Grimes.El
331a5efad6fSJilles Tjoelker.Sh EXAMPLES
332a5efad6fSJilles TjoelkerImplement
333a5efad6fSJilles Tjoelker.Li test FILE1 -nt FILE2
334a5efad6fSJilles Tjoelkerusing only
335a5efad6fSJilles Tjoelker.Tn POSIX
336a5efad6fSJilles Tjoelkerfunctionality:
337a5efad6fSJilles Tjoelker.Pp
338a5efad6fSJilles Tjoelker.Dl test -n \&"$(find -L -- FILE1 -prune -newer FILE2 2>/dev/null)\&"
339a5efad6fSJilles Tjoelker.Pp
340a5efad6fSJilles TjoelkerThis can be modified using non-standard
341a5efad6fSJilles Tjoelker.Xr find 1
342a5efad6fSJilles Tjoelkerprimaries like
343a5efad6fSJilles Tjoelker.Cm -newerca
344a5efad6fSJilles Tjoelkerto compare other timestamps.
345a68c6b57SJilles Tjoelker.Sh COMPATIBILITY
346a68c6b57SJilles TjoelkerFor compatibility with some other implementations,
347a68c6b57SJilles Tjoelkerthe
348a68c6b57SJilles Tjoelker.Cm =
349a68c6b57SJilles Tjoelkerprimary can be substituted with
350a68c6b57SJilles Tjoelker.Cm ==
351a68c6b57SJilles Tjoelkerwith the same meaning.
352e5bf7bf4SJoseph Koshy.Sh SEE ALSO
353d90c5c4aSAkinori MUSHA.Xr builtin 1 ,
354e5bf7bf4SJoseph Koshy.Xr expr 1 ,
355a5efad6fSJilles Tjoelker.Xr find 1 ,
356593cc6f3SYaroslav Tykhiy.Xr sh 1 ,
357a5efad6fSJilles Tjoelker.Xr stat 1 ,
358593cc6f3SYaroslav Tykhiy.Xr symlink 7
3594b88c807SRodney W. Grimes.Sh STANDARDS
3604b88c807SRodney W. GrimesThe
361be8b1497SRuslan Ermilov.Nm
362717a08b6SSheldon Hearnutility implements a superset of the
3634b88c807SRodney W. Grimes.St -p1003.2
364717a08b6SSheldon Hearnspecification.
36528bb6b49SJilles TjoelkerThe primaries
36628bb6b49SJilles Tjoelker.Cm < ,
36728bb6b49SJilles Tjoelker.Cm == ,
36828bb6b49SJilles Tjoelker.Cm > ,
36928bb6b49SJilles Tjoelker.Fl ef ,
37028bb6b49SJilles Tjoelker.Fl nt ,
37128bb6b49SJilles Tjoelker.Fl ot ,
37228bb6b49SJilles Tjoelker.Fl G ,
37328bb6b49SJilles Tjoelkerand
37428bb6b49SJilles Tjoelker.Fl O
37528bb6b49SJilles Tjoelkerare extensions.
3762bb154d9SSevan Janiyan.Sh HISTORY
3772bb154d9SSevan JaniyanA
3782bb154d9SSevan Janiyan.Nm
3792bb154d9SSevan Janiyanutility appeared in
3802bb154d9SSevan Janiyan.At v7 .
381ec45d514SYaroslav Tykhiy.Sh BUGS
382ec45d514SYaroslav TykhiyBoth sides are always evaluated in
383ec45d514SYaroslav Tykhiy.Fl a
384ec45d514SYaroslav Tykhiyand
3852f67f12eSJilles Tjoelker.Fl o .
3866a215886SYaroslav TykhiyFor instance, the writable status of
3876a215886SYaroslav Tykhiy.Pa file
3886a215886SYaroslav Tykhiywill be tested by the following command even though the former expression
3896a215886SYaroslav Tykhiyindicated false, which results in a gratuitous access to the file system:
3906a215886SYaroslav Tykhiy.Dl "[ -z abc -a -w file ]"
3912f67f12eSJilles TjoelkerTo avoid this, write
3922f67f12eSJilles Tjoelker.Dl "[ -z abc ] && [ -w file ]"
393