another ksh93 feature: test -o ?foo (almost zero cost)
This commit is contained in:
parent
ce24c5da13
commit
3639137e48
45
check.t
45
check.t
|
@ -1,4 +1,4 @@
|
||||||
# $MirOS: src/bin/mksh/check.t,v 1.304 2009/09/06 17:55:53 tg Exp $
|
# $MirOS: src/bin/mksh/check.t,v 1.305 2009/09/07 17:24:47 tg Exp $
|
||||||
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
# http://www.research.att.com/~gsf/public/ifs.sh
|
# http://www.research.att.com/~gsf/public/ifs.sh
|
||||||
|
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
@(#)MIRBSD KSH R39 2009/09/06
|
@(#)MIRBSD KSH R39 2009/09/07
|
||||||
description:
|
description:
|
||||||
Check version of shell.
|
Check version of shell.
|
||||||
stdin:
|
stdin:
|
||||||
|
@ -4357,6 +4357,47 @@ stdin:
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
-e 0
|
-e 0
|
||||||
---
|
---
|
||||||
|
name: test-option-1
|
||||||
|
description:
|
||||||
|
Test the test -o operator
|
||||||
|
stdin:
|
||||||
|
runtest() {
|
||||||
|
test -o $1; echo $?
|
||||||
|
[ -o $1 ]; echo $?
|
||||||
|
[[ -o $1 ]]; echo $?
|
||||||
|
}
|
||||||
|
if_test() {
|
||||||
|
test -o $1 -o -o !$1; echo $?
|
||||||
|
[ -o $1 -o -o !$1 ]; echo $?
|
||||||
|
[[ -o $1 || -o !$1 ]]; echo $?
|
||||||
|
test -o ?$1; echo $?
|
||||||
|
}
|
||||||
|
echo 0y $(if_test utf8-mode) =
|
||||||
|
echo 0n $(if_test utf8-hack) =
|
||||||
|
echo 1= $(runtest utf8-hack) =
|
||||||
|
echo 2= $(runtest !utf8-hack) =
|
||||||
|
echo 3= $(runtest ?utf8-hack) =
|
||||||
|
set +U
|
||||||
|
echo 1+ $(runtest utf8-mode) =
|
||||||
|
echo 2+ $(runtest !utf8-mode) =
|
||||||
|
echo 3+ $(runtest ?utf8-mode) =
|
||||||
|
set -U
|
||||||
|
echo 1- $(runtest utf8-mode) =
|
||||||
|
echo 2- $(runtest !utf8-mode) =
|
||||||
|
echo 3- $(runtest ?utf8-mode) =
|
||||||
|
expected-stdout:
|
||||||
|
0y 0 0 0 0 =
|
||||||
|
0n 1 1 1 1 =
|
||||||
|
1= 1 1 1 =
|
||||||
|
2= 1 1 1 =
|
||||||
|
3= 1 1 1 =
|
||||||
|
1+ 1 1 1 =
|
||||||
|
2+ 0 0 0 =
|
||||||
|
3+ 0 0 0 =
|
||||||
|
1- 0 0 0 =
|
||||||
|
2- 1 1 1 =
|
||||||
|
3- 0 0 0 =
|
||||||
|
---
|
||||||
name: mkshrc-1
|
name: mkshrc-1
|
||||||
description:
|
description:
|
||||||
Check that ~/.mkshrc works correctly.
|
Check that ~/.mkshrc works correctly.
|
||||||
|
|
7
funcs.c
7
funcs.c
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.129 2009/09/06 17:42:12 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.130 2009/09/07 17:24:48 tg Exp $");
|
||||||
|
|
||||||
#if HAVE_KILLPG
|
#if HAVE_KILLPG
|
||||||
/*
|
/*
|
||||||
|
@ -2782,12 +2782,11 @@ test_eval(Test_env *te, Test_op op, const char *opnd1, const char *opnd2,
|
||||||
case TO_STZER: /* -z */
|
case TO_STZER: /* -z */
|
||||||
return (*opnd1 == '\0');
|
return (*opnd1 == '\0');
|
||||||
case TO_OPTION: /* -o */
|
case TO_OPTION: /* -o */
|
||||||
if ((i = *opnd1 == '!'))
|
if ((i = *opnd1) == '!' || i == '?')
|
||||||
opnd1++;
|
opnd1++;
|
||||||
if ((k = option(opnd1)) == (size_t)-1)
|
if ((k = option(opnd1)) == (size_t)-1)
|
||||||
return (0);
|
return (0);
|
||||||
s = Flag(k);
|
return (i == '?' ? 1 : i == '!' ? !Flag(k) : Flag(k));
|
||||||
return (i ? !s : s);
|
|
||||||
case TO_FILRD: /* -r */
|
case TO_FILRD: /* -r */
|
||||||
return (test_eaccess(opnd1, R_OK) == 0);
|
return (test_eaccess(opnd1, R_OK) == 0);
|
||||||
case TO_FILWR: /* -w */
|
case TO_FILWR: /* -w */
|
||||||
|
|
7
mksh.1
7
mksh.1
|
@ -1,4 +1,4 @@
|
||||||
.\" $MirOS: src/bin/mksh/mksh.1,v 1.183 2009/09/06 18:17:51 tg Exp $
|
.\" $MirOS: src/bin/mksh/mksh.1,v 1.184 2009/09/07 17:24:49 tg Exp $
|
||||||
.\" $OpenBSD: ksh.1,v 1.129 2009/05/28 06:09:06 jmc Exp $
|
.\" $OpenBSD: ksh.1,v 1.129 2009/05/28 06:09:06 jmc Exp $
|
||||||
.\"-
|
.\"-
|
||||||
.\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
.\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
.el .xD \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
|
.el .xD \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
|
||||||
..
|
..
|
||||||
.\"-
|
.\"-
|
||||||
.Dd $Mdocdate: September 6 2009 $
|
.Dd $Mdocdate: September 7 2009 $
|
||||||
.Dt MKSH 1
|
.Dt MKSH 1
|
||||||
.Os MirBSD
|
.Os MirBSD
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -3882,6 +3882,9 @@ the test is negated; the test always fails if
|
||||||
doesn't exist (so [ \-o foo \-o \-o !foo ] returns true if and only if option
|
doesn't exist (so [ \-o foo \-o \-o !foo ] returns true if and only if option
|
||||||
.Ar foo
|
.Ar foo
|
||||||
exists).
|
exists).
|
||||||
|
The same can be achieved with [ \-o ?foo ] like in
|
||||||
|
.At
|
||||||
|
.Nm ksh93 .
|
||||||
.It Fl p Ar file
|
.It Fl p Ar file
|
||||||
.Ar file
|
.Ar file
|
||||||
is a named pipe.
|
is a named pipe.
|
||||||
|
|
4
sh.h
4
sh.h
|
@ -134,9 +134,9 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef EXTERN
|
#ifdef EXTERN
|
||||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.339 2009/09/06 17:55:55 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.340 2009/09/07 17:24:49 tg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#define MKSH_VERSION "R39 2009/09/06"
|
#define MKSH_VERSION "R39 2009/09/07"
|
||||||
|
|
||||||
#ifndef MKSH_INCLUDES_ONLY
|
#ifndef MKSH_INCLUDES_ONLY
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue