bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Adding support for '--' in builtin echo's option parsing.


From: Hemmo Nieminen
Subject: [PATCH] Adding support for '--' in builtin echo's option parsing.
Date: Mon, 1 Apr 2013 15:16:07 +0300
User-agent: Mutt/1.5.21 (2010-09-15)

Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' 
-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-unknown-linux-gnu' 
-DCONF_VENDOR='unknown' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' 
-DSHELL -DHAVE_CONFIG_H   -I.  -I. -I./include -I./lib   -march=x86-64 
-mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 
-D_FORTIFY_SOURCE=2 
-DDEFAULT_PATH_VALUE='/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin'
 -DSTANDARD_UTILS_PATH='/usr/bin:/bin:/usr/sbin:/sbin' 
-DSYS_BASHRC='/etc/bash.bashrc' -DSYS_BASH_LOGOUT='/etc/bash.bash_logout'
uname output: Linux fcku 3.8.4-1-ARCH #1 SMP PREEMPT Wed Mar 20 22:10:25 CET 
2013 x86_64 GNU/Linux
Machine Type: x86_64-unknown-linux-gnu

Bash Version: 4.2
Patch Level: 45
Release Status: release

Description:
        Currently it seems to be impossible to e.g. print "-n" with the builtin
        echo witout any extra characters.

Repeat-By:
        Invoke echo with the string "-n" being the string to be outputted.
        Expected output: "-n"

Fix:
        The attached patch makes the builtin echo to interpret '--' as the end
        of options.

>From a30b02d03f54777bc0e59e2a0086249fde932308 Mon Sep 17 00:00:00 2001
From: Hemmo Nieminen <address@hidden>
Date: Mon, 1 Apr 2013 14:59:26 +0300
Subject: [PATCH] Adding support for '--' in builtin echo's option parsing.

A '--' can now be used to mark the end of echo's options that should be
parsed. This makes it possible to e.g. print lines where the first
argument matches some of echo's options (e.g. 'echo -- -e').
---
 builtins/echo.def | 15 +++++++++++++--
 doc/bash.1        |  7 +++----
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/builtins/echo.def b/builtins/echo.def
index 62c6199..62e75c3 100644
--- a/builtins/echo.def
+++ b/builtins/echo.def
@@ -35,7 +35,7 @@ $PRODUCES echo.c
 $BUILTIN echo
 $FUNCTION echo_builtin
 $DEPENDS_ON V9_ECHO
-$SHORT_DOC echo [-neE] [arg ...]
+$SHORT_DOC echo [-neE] [--] [arg ...]
 Write arguments to the standard output.
 
 Display the ARGs on the standard output followed by a newline.
@@ -45,6 +45,8 @@ Options:
   -e   enable interpretation of the following backslash escapes
   -E   explicitly suppress interpretation of backslash escapes
 
+A '--' can be used to mark the end of options.
+
 `echo' interprets the following backslash-escaped characters:
   \a   alert (bell)
   \b   backspace
@@ -68,7 +70,7 @@ $END
 $BUILTIN echo
 $FUNCTION echo_builtin
 $DEPENDS_ON !V9_ECHO
-$SHORT_DOC echo [-n] [arg ...]
+$SHORT_DOC echo [-n] [--] [arg ...]
 Write arguments to the standard output.
 
 Display the ARGs on the standard output followed by a newline.
@@ -76,6 +78,8 @@ Display the ARGs on the standard output followed by a newline.
 Options:
   -n   do not append a newline
 
+A '--' can be used to mark the end of options.
+
 Exit Status:
 Returns success unless a write error occurs.
 $END
@@ -122,6 +126,13 @@ echo_builtin (list)
         string should just be echoed. */
       temp++;
 
+      if (temp[0] == '-' && temp[1] == '\0')
+        {
+          list = list->next;
+          break;
+        }
+
+
       for (i = 0; temp[i]; i++)
        {
          if (strchr (VALID_ECHO_OPTIONS, temp[i]) == 0)
diff --git a/doc/bash.1 b/doc/bash.1
index 103d27e..4ca17d5 100644
--- a/doc/bash.1
+++ b/doc/bash.1
@@ -7325,7 +7325,7 @@ The return value is 0 unless a
 .I jobspec
 does not specify a valid job.
 .TP
-\fBecho\fP [\fB\-neE\fP] [\fIarg\fP ...]
+\fBecho\fP [\fB\-neE\fP] [\fB\-\-\fP] [\fIarg\fP ...]
 Output the \fIarg\fPs, separated by spaces, followed by a newline.
 The return status is always 0.
 If \fB\-n\fP is specified, the trailing newline is
@@ -7336,9 +7336,8 @@ option disables the interpretation of these escape 
characters,
 even on systems where they are interpreted by default.
 The \fBxpg_echo\fP shell option may be used to
 dynamically determine whether or not \fBecho\fP expands these
-escape characters by default.
-.B echo
-does not interpret \fB\-\-\fP to mean the end of options.
+escape characters by default. \fB\-\-\fP can be used to mark the
+end of options.
 .B echo
 interprets the following escape sequences:
 .RS
-- 
1.8.2


reply via email to

[Prev in Thread] Current Thread [Next in Thread]