diff options
-rw-r--r-- | NEWS | 10 | ||||
-rw-r--r-- | README_d/README.bootstrap | 32 | ||||
-rw-r--r-- | doc/ChangeLog | 4 | ||||
-rw-r--r-- | doc/gawk.info | 526 | ||||
-rw-r--r-- | doc/gawk.texi | 14 |
5 files changed, 311 insertions, 275 deletions
@@ -7,12 +7,12 @@ Changes from 4.0.0 to 4.0.1 --------------------------- -1. The default handling of backslash in sub() and gsub() has been reverted to the - behavior of 3.1. It was silly to think I could break compatibility that way, - even for standards compliance. +1. The default handling of backslash in sub() and gsub() has been reverted to + the behavior of 3.1. It was silly to think I could break compatibility that + way, even for standards compliance. -XXX. Lots of minor bugs fixed and portability clean-ups along the way. See the ChangeLog - for details. +XXX. Lots of minor bugs fixed and portability clean-ups along the way. See + the ChangeLog for details. Changes from 3.1.8 to 4.0.0 --------------------------- diff --git a/README_d/README.bootstrap b/README_d/README.bootstrap new file mode 100644 index 00000000..152bbefa --- /dev/null +++ b/README_d/README.bootstrap @@ -0,0 +1,32 @@ +Tue Dec 6 21:33:19 IST 2011 +============================ + +As documented in the mail below, if you are using a system without any +version of awk installed, you will have bootstrapping problems (i.e., running +configure). The solution is to install mawk or Brian Kernighan's awk +first. + +Arnold Robbins +------------------------------------ +From: Simon Josefsson <simon@josefsson.org> +To: bug-gawk@gnu.org +Date: Sat, 19 Nov 2011 15:24:22 +0100 +Message-ID: <87r514faw9.fsf@latte.josefsson.org> +Subject: [bug-gawk] building gawk requires an awk? + +Hello, + +I was not able to build gawk 4.0.0 on a GNU/Hurd machine that didn't +have any awk, the ./configure script failed at the end: + +config.status: creating Makefile +./config.status: line 1169: awk: command not found +config.status: error: could not create Makefile + +Is this a known bootstrapping issue? Same happened for 3.1.8. I looked +in README but didn't find anything obvious. + +Btw, building 'mawk' first and then gawk 4.0.0 works. Running self +checks didn't work because there is no 'cmp' on the system either... + +/Simon diff --git a/doc/ChangeLog b/doc/ChangeLog index dec5ddca..2921a919 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2011-12-06 Arnold D. Robbins <arnold@skeeve.com> + + * gawk.texi: Various typo fixes from mailing list. + 2011-11-10 Arnold D. Robbins <arnold@skeeve.com> * gawk.1: Fix some .BR to be .B. diff --git a/doc/gawk.info b/doc/gawk.info index 877f50d3..38ddd47c 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -7973,7 +7973,7 @@ summary of the types of `awk' patterns: `BEGINFILE' `ENDFILE' - Special patterns for you to supply startup or cleanup actions to + Special patterns for you to supply startup or cleanup actions to be done on a per file basis. (*Note BEGINFILE/ENDFILE::.) `EMPTY' @@ -8852,12 +8852,12 @@ the previous example with the following `while' loop: This program loops forever once `x' reaches 5. The `continue' statement has no special meaning with respect to the -`switch' statement, nor does it any meaning when used outside the body -of a loop. Historical versions of `awk' treated a `continue' statement -outside a loop the same way they treated a `break' statement outside a -loop: as if it were a `next' statement (*note Next Statement::). -(d.c.) Recent versions of Brian Kernighan's `awk' no longer work this -way, nor does `gawk'. +`switch' statement, nor does it have any meaning when used outside the +body of a loop. Historical versions of `awk' treated a `continue' +statement outside a loop the same way they treated a `break' statement +outside a loop: as if it were a `next' statement (*note Next +Statement::). (d.c.) Recent versions of Brian Kernighan's `awk' no +longer work this way, nor does `gawk'. File: gawk.info, Node: Next Statement, Next: Nextfile Statement, Prev: Continue Statement, Up: Statements @@ -27588,261 +27588,261 @@ Node: Precedence330801 Node: Locales334470 Node: Patterns and Actions335559 Node: Pattern Overview336613 -Node: Regexp Patterns338279 -Node: Expression Patterns338822 -Node: Ranges342507 -Node: BEGIN/END345473 -Node: Using BEGIN/END346235 -Ref: Using BEGIN/END-Footnote-1348966 -Node: I/O And BEGIN/END349072 -Node: BEGINFILE/ENDFILE351354 -Node: Empty354247 -Node: Using Shell Variables354563 -Node: Action Overview356848 -Node: Statements359205 -Node: If Statement361059 -Node: While Statement362558 -Node: Do Statement364602 -Node: For Statement365758 -Node: Switch Statement368910 -Node: Break Statement371007 -Node: Continue Statement372997 -Node: Next Statement374784 -Node: Nextfile Statement377174 -Node: Exit Statement379719 -Node: Built-in Variables382135 -Node: User-modified383230 -Ref: User-modified-Footnote-1391256 -Node: Auto-set391318 -Ref: Auto-set-Footnote-1400609 -Node: ARGC and ARGV400814 -Node: Arrays404665 -Node: Array Basics406170 -Node: Array Intro406996 -Node: Reference to Elements411314 -Node: Assigning Elements413584 -Node: Array Example414075 -Node: Scanning an Array415807 -Node: Controlling Scanning418121 -Ref: Controlling Scanning-Footnote-1423053 -Node: Delete423369 -Ref: Delete-Footnote-1425804 -Node: Numeric Array Subscripts425861 -Node: Uninitialized Subscripts428044 -Node: Multi-dimensional429672 -Node: Multi-scanning432766 -Node: Arrays of Arrays434357 -Node: Functions439002 -Node: Built-in439824 -Node: Calling Built-in440902 -Node: Numeric Functions442890 -Ref: Numeric Functions-Footnote-1446655 -Ref: Numeric Functions-Footnote-2447012 -Ref: Numeric Functions-Footnote-3447060 -Node: String Functions447329 -Ref: String Functions-Footnote-1470826 -Ref: String Functions-Footnote-2470955 -Ref: String Functions-Footnote-3471203 -Node: Gory Details471290 -Ref: table-sub-escapes472969 -Ref: table-sub-posix-92474323 -Ref: table-sub-proposed475666 -Ref: table-posix-sub477016 -Ref: table-gensub-escapes478562 -Ref: Gory Details-Footnote-1479769 -Ref: Gory Details-Footnote-2479820 -Node: I/O Functions479971 -Ref: I/O Functions-Footnote-1486626 -Node: Time Functions486773 -Ref: Time Functions-Footnote-1497665 -Ref: Time Functions-Footnote-2497733 -Ref: Time Functions-Footnote-3497891 -Ref: Time Functions-Footnote-4498002 -Ref: Time Functions-Footnote-5498114 -Ref: Time Functions-Footnote-6498341 -Node: Bitwise Functions498607 -Ref: table-bitwise-ops499165 -Ref: Bitwise Functions-Footnote-1503325 -Node: Type Functions503509 -Node: I18N Functions503979 -Node: User-defined505606 -Node: Definition Syntax506410 -Ref: Definition Syntax-Footnote-1511320 -Node: Function Example511389 -Node: Function Caveats513983 -Node: Calling A Function514404 -Node: Variable Scope515519 -Node: Pass By Value/Reference517494 -Node: Return Statement520934 -Node: Dynamic Typing523915 -Node: Indirect Calls524650 -Node: Internationalization534335 -Node: I18N and L10N535761 -Node: Explaining gettext536447 -Ref: Explaining gettext-Footnote-1541513 -Ref: Explaining gettext-Footnote-2541697 -Node: Programmer i18n541862 -Node: Translator i18n546062 -Node: String Extraction546855 -Ref: String Extraction-Footnote-1547816 -Node: Printf Ordering547902 -Ref: Printf Ordering-Footnote-1550686 -Node: I18N Portability550750 -Ref: I18N Portability-Footnote-1553199 -Node: I18N Example553262 -Ref: I18N Example-Footnote-1555897 -Node: Gawk I18N555969 -Node: Advanced Features556586 -Node: Nondecimal Data558099 -Node: Array Sorting559682 -Node: Controlling Array Traversal560379 -Node: Array Sorting Functions568616 -Ref: Array Sorting Functions-Footnote-1572290 -Ref: Array Sorting Functions-Footnote-2572383 -Node: Two-way I/O572577 -Ref: Two-way I/O-Footnote-1578009 -Node: TCP/IP Networking578079 -Node: Profiling580923 -Node: Library Functions588397 -Ref: Library Functions-Footnote-1591404 -Node: Library Names591575 -Ref: Library Names-Footnote-1595046 -Ref: Library Names-Footnote-2595266 -Node: General Functions595352 -Node: Strtonum Function596305 -Node: Assert Function599235 -Node: Round Function602561 -Node: Cliff Random Function604104 -Node: Ordinal Functions605120 -Ref: Ordinal Functions-Footnote-1608190 -Ref: Ordinal Functions-Footnote-2608442 -Node: Join Function608651 -Ref: Join Function-Footnote-1610422 -Node: Gettimeofday Function610622 -Node: Data File Management614337 -Node: Filetrans Function614969 -Node: Rewind Function619108 -Node: File Checking620495 -Node: Empty Files621589 -Node: Ignoring Assigns623819 -Node: Getopt Function625372 -Ref: Getopt Function-Footnote-1636676 -Node: Passwd Functions636879 -Ref: Passwd Functions-Footnote-1645854 -Node: Group Functions645942 -Node: Walking Arrays654026 -Node: Sample Programs655595 -Node: Running Examples656260 -Node: Clones656988 -Node: Cut Program658212 -Node: Egrep Program668057 -Ref: Egrep Program-Footnote-1675830 -Node: Id Program675940 -Node: Split Program679556 -Ref: Split Program-Footnote-1683075 -Node: Tee Program683203 -Node: Uniq Program686006 -Node: Wc Program693435 -Ref: Wc Program-Footnote-1697701 -Ref: Wc Program-Footnote-2697901 -Node: Miscellaneous Programs697993 -Node: Dupword Program699181 -Node: Alarm Program701212 -Node: Translate Program705961 -Ref: Translate Program-Footnote-1710348 -Ref: Translate Program-Footnote-2710576 -Node: Labels Program710710 -Ref: Labels Program-Footnote-1714081 -Node: Word Sorting714165 -Node: History Sorting718049 -Node: Extract Program719888 -Ref: Extract Program-Footnote-1727371 -Node: Simple Sed727499 -Node: Igawk Program730561 -Ref: Igawk Program-Footnote-1745718 -Ref: Igawk Program-Footnote-2745919 -Node: Anagram Program746057 -Node: Signature Program749125 -Node: Debugger750225 -Node: Debugging751136 -Node: Debugging Concepts751549 -Node: Debugging Terms753405 -Node: Awk Debugging756028 -Node: Sample dgawk session756920 -Node: dgawk invocation757412 -Node: Finding The Bug758594 -Node: List of Debugger Commands765080 -Node: Breakpoint Control766391 -Node: Dgawk Execution Control770027 -Node: Viewing And Changing Data773378 -Node: Dgawk Stack776715 -Node: Dgawk Info778175 -Node: Miscellaneous Dgawk Commands782123 -Node: Readline Support787551 -Node: Dgawk Limitations788389 -Node: Language History790578 -Node: V7/SVR3.1792090 -Node: SVR4794411 -Node: POSIX795853 -Node: BTL796861 -Node: POSIX/GNU797595 -Node: Common Extensions802746 -Node: Ranges and Locales803853 -Ref: Ranges and Locales-Footnote-1808460 -Node: Contributors808681 -Node: Installation812943 -Node: Gawk Distribution813837 -Node: Getting814321 -Node: Extracting815147 -Node: Distribution contents816839 -Node: Unix Installation822061 -Node: Quick Installation822678 -Node: Additional Configuration Options824640 -Node: Configuration Philosophy826117 -Node: Non-Unix Installation828459 -Node: PC Installation828917 -Node: PC Binary Installation830216 -Node: PC Compiling832064 -Node: PC Testing835008 -Node: PC Using836184 -Node: Cygwin840369 -Node: MSYS841369 -Node: VMS Installation841883 -Node: VMS Compilation842486 -Ref: VMS Compilation-Footnote-1843493 -Node: VMS Installation Details843551 -Node: VMS Running845186 -Node: VMS Old Gawk846793 -Node: Bugs847267 -Node: Other Versions851119 -Node: Notes856400 -Node: Compatibility Mode857092 -Node: Additions857875 -Node: Accessing The Source858687 -Node: Adding Code860112 -Node: New Ports866079 -Node: Dynamic Extensions870192 -Node: Internals871568 -Node: Plugin License880671 -Node: Sample Library881305 -Node: Internal File Description881991 -Node: Internal File Ops885706 -Ref: Internal File Ops-Footnote-1890487 -Node: Using Internal File Ops890627 -Node: Future Extensions893004 -Node: Basic Concepts895508 -Node: Basic High Level896265 -Ref: Basic High Level-Footnote-1900300 -Node: Basic Data Typing900485 -Node: Floating Point Issues905010 -Node: String Conversion Precision906093 -Ref: String Conversion Precision-Footnote-1907793 -Node: Unexpected Results907902 -Node: POSIX Floating Point Problems909728 -Ref: POSIX Floating Point Problems-Footnote-1913433 -Node: Glossary913471 -Node: Copying938447 -Node: GNU Free Documentation License976004 -Node: Index1001141 +Node: Regexp Patterns338282 +Node: Expression Patterns338825 +Node: Ranges342510 +Node: BEGIN/END345476 +Node: Using BEGIN/END346238 +Ref: Using BEGIN/END-Footnote-1348969 +Node: I/O And BEGIN/END349075 +Node: BEGINFILE/ENDFILE351357 +Node: Empty354250 +Node: Using Shell Variables354566 +Node: Action Overview356851 +Node: Statements359208 +Node: If Statement361062 +Node: While Statement362561 +Node: Do Statement364605 +Node: For Statement365761 +Node: Switch Statement368913 +Node: Break Statement371010 +Node: Continue Statement373000 +Node: Next Statement374793 +Node: Nextfile Statement377183 +Node: Exit Statement379728 +Node: Built-in Variables382144 +Node: User-modified383239 +Ref: User-modified-Footnote-1391265 +Node: Auto-set391327 +Ref: Auto-set-Footnote-1400618 +Node: ARGC and ARGV400823 +Node: Arrays404674 +Node: Array Basics406179 +Node: Array Intro407005 +Node: Reference to Elements411323 +Node: Assigning Elements413593 +Node: Array Example414084 +Node: Scanning an Array415816 +Node: Controlling Scanning418130 +Ref: Controlling Scanning-Footnote-1423062 +Node: Delete423378 +Ref: Delete-Footnote-1425813 +Node: Numeric Array Subscripts425870 +Node: Uninitialized Subscripts428053 +Node: Multi-dimensional429681 +Node: Multi-scanning432775 +Node: Arrays of Arrays434366 +Node: Functions439011 +Node: Built-in439833 +Node: Calling Built-in440911 +Node: Numeric Functions442899 +Ref: Numeric Functions-Footnote-1446664 +Ref: Numeric Functions-Footnote-2447021 +Ref: Numeric Functions-Footnote-3447069 +Node: String Functions447338 +Ref: String Functions-Footnote-1470835 +Ref: String Functions-Footnote-2470964 +Ref: String Functions-Footnote-3471212 +Node: Gory Details471299 +Ref: table-sub-escapes472978 +Ref: table-sub-posix-92474332 +Ref: table-sub-proposed475675 +Ref: table-posix-sub477025 +Ref: table-gensub-escapes478571 +Ref: Gory Details-Footnote-1479778 +Ref: Gory Details-Footnote-2479829 +Node: I/O Functions479980 +Ref: I/O Functions-Footnote-1486635 +Node: Time Functions486782 +Ref: Time Functions-Footnote-1497674 +Ref: Time Functions-Footnote-2497742 +Ref: Time Functions-Footnote-3497900 +Ref: Time Functions-Footnote-4498011 +Ref: Time Functions-Footnote-5498123 +Ref: Time Functions-Footnote-6498350 +Node: Bitwise Functions498616 +Ref: table-bitwise-ops499174 +Ref: Bitwise Functions-Footnote-1503334 +Node: Type Functions503518 +Node: I18N Functions503988 +Node: User-defined505615 +Node: Definition Syntax506419 +Ref: Definition Syntax-Footnote-1511329 +Node: Function Example511398 +Node: Function Caveats513992 +Node: Calling A Function514413 +Node: Variable Scope515528 +Node: Pass By Value/Reference517503 +Node: Return Statement520943 +Node: Dynamic Typing523924 +Node: Indirect Calls524659 +Node: Internationalization534344 +Node: I18N and L10N535770 +Node: Explaining gettext536456 +Ref: Explaining gettext-Footnote-1541522 +Ref: Explaining gettext-Footnote-2541706 +Node: Programmer i18n541871 +Node: Translator i18n546071 +Node: String Extraction546864 +Ref: String Extraction-Footnote-1547825 +Node: Printf Ordering547911 +Ref: Printf Ordering-Footnote-1550695 +Node: I18N Portability550759 +Ref: I18N Portability-Footnote-1553208 +Node: I18N Example553271 +Ref: I18N Example-Footnote-1555906 +Node: Gawk I18N555978 +Node: Advanced Features556595 +Node: Nondecimal Data558108 +Node: Array Sorting559691 +Node: Controlling Array Traversal560388 +Node: Array Sorting Functions568625 +Ref: Array Sorting Functions-Footnote-1572299 +Ref: Array Sorting Functions-Footnote-2572392 +Node: Two-way I/O572586 +Ref: Two-way I/O-Footnote-1578018 +Node: TCP/IP Networking578088 +Node: Profiling580932 +Node: Library Functions588406 +Ref: Library Functions-Footnote-1591413 +Node: Library Names591584 +Ref: Library Names-Footnote-1595055 +Ref: Library Names-Footnote-2595275 +Node: General Functions595361 +Node: Strtonum Function596314 +Node: Assert Function599244 +Node: Round Function602570 +Node: Cliff Random Function604113 +Node: Ordinal Functions605129 +Ref: Ordinal Functions-Footnote-1608199 +Ref: Ordinal Functions-Footnote-2608451 +Node: Join Function608660 +Ref: Join Function-Footnote-1610431 +Node: Gettimeofday Function610631 +Node: Data File Management614346 +Node: Filetrans Function614978 +Node: Rewind Function619117 +Node: File Checking620504 +Node: Empty Files621598 +Node: Ignoring Assigns623828 +Node: Getopt Function625381 +Ref: Getopt Function-Footnote-1636685 +Node: Passwd Functions636888 +Ref: Passwd Functions-Footnote-1645863 +Node: Group Functions645951 +Node: Walking Arrays654035 +Node: Sample Programs655604 +Node: Running Examples656269 +Node: Clones656997 +Node: Cut Program658221 +Node: Egrep Program668066 +Ref: Egrep Program-Footnote-1675839 +Node: Id Program675949 +Node: Split Program679565 +Ref: Split Program-Footnote-1683084 +Node: Tee Program683212 +Node: Uniq Program686015 +Node: Wc Program693444 +Ref: Wc Program-Footnote-1697710 +Ref: Wc Program-Footnote-2697910 +Node: Miscellaneous Programs698002 +Node: Dupword Program699190 +Node: Alarm Program701221 +Node: Translate Program705970 +Ref: Translate Program-Footnote-1710357 +Ref: Translate Program-Footnote-2710585 +Node: Labels Program710719 +Ref: Labels Program-Footnote-1714090 +Node: Word Sorting714174 +Node: History Sorting718058 +Node: Extract Program719897 +Ref: Extract Program-Footnote-1727380 +Node: Simple Sed727508 +Node: Igawk Program730570 +Ref: Igawk Program-Footnote-1745727 +Ref: Igawk Program-Footnote-2745928 +Node: Anagram Program746066 +Node: Signature Program749134 +Node: Debugger750234 +Node: Debugging751145 +Node: Debugging Concepts751558 +Node: Debugging Terms753414 +Node: Awk Debugging756037 +Node: Sample dgawk session756929 +Node: dgawk invocation757421 +Node: Finding The Bug758603 +Node: List of Debugger Commands765089 +Node: Breakpoint Control766400 +Node: Dgawk Execution Control770036 +Node: Viewing And Changing Data773387 +Node: Dgawk Stack776724 +Node: Dgawk Info778184 +Node: Miscellaneous Dgawk Commands782132 +Node: Readline Support787560 +Node: Dgawk Limitations788398 +Node: Language History790587 +Node: V7/SVR3.1792099 +Node: SVR4794420 +Node: POSIX795862 +Node: BTL796870 +Node: POSIX/GNU797604 +Node: Common Extensions802755 +Node: Ranges and Locales803862 +Ref: Ranges and Locales-Footnote-1808469 +Node: Contributors808690 +Node: Installation812952 +Node: Gawk Distribution813846 +Node: Getting814330 +Node: Extracting815156 +Node: Distribution contents816848 +Node: Unix Installation822070 +Node: Quick Installation822687 +Node: Additional Configuration Options824649 +Node: Configuration Philosophy826126 +Node: Non-Unix Installation828468 +Node: PC Installation828926 +Node: PC Binary Installation830225 +Node: PC Compiling832073 +Node: PC Testing835017 +Node: PC Using836193 +Node: Cygwin840378 +Node: MSYS841378 +Node: VMS Installation841892 +Node: VMS Compilation842495 +Ref: VMS Compilation-Footnote-1843502 +Node: VMS Installation Details843560 +Node: VMS Running845195 +Node: VMS Old Gawk846802 +Node: Bugs847276 +Node: Other Versions851128 +Node: Notes856409 +Node: Compatibility Mode857101 +Node: Additions857884 +Node: Accessing The Source858696 +Node: Adding Code860121 +Node: New Ports866088 +Node: Dynamic Extensions870201 +Node: Internals871577 +Node: Plugin License880680 +Node: Sample Library881314 +Node: Internal File Description882000 +Node: Internal File Ops885715 +Ref: Internal File Ops-Footnote-1890496 +Node: Using Internal File Ops890636 +Node: Future Extensions893013 +Node: Basic Concepts895517 +Node: Basic High Level896274 +Ref: Basic High Level-Footnote-1900309 +Node: Basic Data Typing900494 +Node: Floating Point Issues905019 +Node: String Conversion Precision906102 +Ref: String Conversion Precision-Footnote-1907802 +Node: Unexpected Results907911 +Node: POSIX Floating Point Problems909737 +Ref: POSIX Floating Point Problems-Footnote-1913442 +Node: Glossary913480 +Node: Copying938456 +Node: GNU Free Documentation License976013 +Node: Index1001150 End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 9cd4b74c..33e66d70 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -10908,7 +10908,7 @@ Special patterns for you to supply startup or cleanup actions for your @item BEGINFILE @itemx ENDFILE -Special patterns for you to supply startup or cleanup actions to +Special patterns for you to supply startup or cleanup actions to be done on a per file basis. (@xref{BEGINFILE/ENDFILE}.) @@ -12023,8 +12023,8 @@ This program loops forever once @code{x} reaches 5. @cindex dark corner, @code{continue} statement @cindex @command{gawk}, @code{continue} statement in The @code{continue} statement has no special meaning with respect to the -@code{switch} statement, nor does it any meaning when used outside the body of -a loop. Historical versions of @command{awk} treated a @code{continue} +@code{switch} statement, nor does it have any meaning when used outside the +body of a loop. Historical versions of @command{awk} treated a @code{continue} statement outside a loop the same way they treated a @code{break} statement outside a loop: as if it were a @code{next} statement @@ -13415,7 +13415,7 @@ and will vary from one version of @command{awk} to the next. Often, though, you may wish to do something simple, such as ``traverse the array by comparing the indices in ascending order,'' or ``traverse the array by on comparing the values in descending order.'' -@command{gawk} provides two mechanims which give you this control. +@command{gawk} provides two mechanisms which give you this control. @itemize @bullet @item @@ -18455,7 +18455,7 @@ END @{ @end example The first field in each entry of the password file is the user's login name, -and the fields are seperated by colons. +and the fields are separated by colons. Each record defines a subarray, with each field as an element in the subarray. Running the program produces the @@ -27011,13 +27011,13 @@ inclusive. Ordering was based on the numeric value of each character in the machine's native character set. Thus, on ASCII-based systems, @code{[a-z]} matched all the lowercase letters, and only the lowercase letters, since the numeric values for the letters from @samp{a} through -@samp{z} were contigous. (On an EBCDIC system, the range @samp{[a-z]} +@samp{z} were contiguous. (On an EBCDIC system, the range @samp{[a-z]} includes additional, non-alphabetic characters as well.) Almost all introductory Unix literature explained range expressions as working in this fashion, and in particular, would teach that the ``correct'' way to match lowercase letters was with @samp{[a-z]}, and -that @samp{[A-Z]} was the the ``correct'' way to match uppercase letters. +that @samp{[A-Z]} was the ``correct'' way to match uppercase letters. And indeed, this was true. The 1993 POSIX standard introduced the idea of locales (@pxref{Locales}). |