'\" t .\" Title: enum .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 02/02/2012 .\" Manual: enum 1.1 .\" Source: enum 1.1 .\" Language: English .\" .TH "ENUM" "1" "02/02/2012" "enum 1\&.1" "enum 1\&.1" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" enum \- seq\- and jot\-like enumerator .SH "SYNOPSIS" .SS "GENERAL" .sp \fBenum\fR [ \fIOPTIONS\fR ] \fILEFT\fR \fB\&.\&.\fR \fICOUNT\fR\fBx\fR \fISTEP\fR \fB\&.\&.\fR \fIRIGHT\fR .SS "SHORTCUTS" .sp \fBenum\fR [ \fIOPTIONS\fR ] \fILEFT\fR \fISTEP\fR \fIRIGHT\fR .sp \fBenum\fR [ \fIOPTIONS\fR ] \fILEFT\fR \fIRIGHT\fR .sp \fBenum\fR [ \fIOPTIONS\fR ] \fIRIGHT\fR .sp \&... .SH "DESCRIPTION" .sp \fBenum\fR enumerates values (numbers) from \fILEFT\fR to \fIRIGHT\fR adding/subtracting \fISTEP\fR each time\&. If \fISTEP\fR is not provided a value is implied\&. No more than \fICOUNT\fR values are printed\&. Before printing, values are passed through a formatter\&. Please see \fBOPTIONS\fR for details on controlling the formatter or \fBEXAMPLES\fR for use cases\&. .sp Further \fBenum\fR usage details are covered in \fBUSAGE IN DETAIL\fR\&. .SH "EXAMPLES" .SS "USE IN FOR\-LOOPS" .sp .if n \{\ .RS 4 .\} .nf for i in $(enum \-e 1 20); do touch file_${i} done .fi .if n \{\ .RE .\} .SS "USE FOR RANDOM NUMBERS" .sp .if n \{\ .RS 4 .\} .nf number=$(enum \-\-random 3 \&.\&. 10) .fi .if n \{\ .RE .\} .sp instead of native Bash like .sp .if n \{\ .RS 4 .\} .nf f() { min=$1; max=$2; echo $((RANDOM * (max \- min + 1) / 32767 + min)); } number=$(f 3 10) .fi .if n \{\ .RE .\} .SS "SHOWING AN ASCII TABLE" .sp .if n \{\ .RS 4 .\} .nf enum \-f \*(Aq[%3i] "%c"\*(Aq 0 127 .fi .if n \{\ .RE .\} .SH "OPTIONS" .SS "RANDOM MODE" .PP \fB\-r\fR, \fB\-\-random\fR .RS 4 Produces random numbers (potentially with duplicates) instead of monotonic sequences\&. .RE .PP \fB\-i\fR, \fB\-\-seed\fR=\fINUMBER\fR .RS 4 Pass \fINUMBER\fR as initializer to the random number generator\&. By default, the RNG is initialized from the current time and the process ID of the running instance of \fBenum\fR\&. .RE .SS "FORMATTING" .PP \fB\-b\fR, \fB\-\-dumb\fR=\fITEXT\fR .RS 4 Overrides the output format to \fITEXT\fR without interpolating placeholders\&. For instance, \fBenum \-b "foo % 10" 3x\fR produces the string "foo % 10" three times\&. .RE .PP \fB\-c\fR, \fB\-\-characters\fR .RS 4 Overrides the output format to %c producing characters\&. For example, \fBenum \-c 65 67\fR produces the letters "A", "B" and "C"\&. .RE .PP \fB\-e\fR, \fB\-\-equal\-width\fR .RS 4 Equalize width by padding with leading zeroes\&. NOTE: In the case of mixed negative and non\-negative numbers (e\&.g\&. with \fBenum \-e \(em \-10 1\fR), non\-negative values will compensate for the lack of a leading minus with an extra zero to be of equal width\&. .RE .PP \fB\-f\fR, \fB\-\-format\fR=\fIFORMAT\fR .RS 4 Overrides the default output format with \fIFORMAT\fR\&. For details on allowed formats please see printf(3)\&. \fIFORMAT\fR is subject to processing of C escape sequences (e\&.g\&. "\en" makes a newline)\&. If \fIFORMAT\fR does not contain any placeholders, \fBenum\fR will print \fIFORMAT\fR repeatedly\&. In contrast, jot would have appended the number\(cqs value instead\&. To make numbers appear at the end with \fBenum\fR, adjust \fIFORMAT\fR appropriately\&. .RE .PP \fB\-l\fR, \fB\-\-line\fR .RS 4 Shortcut for "\fB\-s \*(Aq \*(Aq\fR" which means having a space instead of a newline as separator\&. .RE .PP \fB\-n\fR, \fB\-\-omit\-newline\fR .RS 4 Omits the terminating string (defaults to newline) from output, i\&.e\&. it\(cqs a shortcut to "\fB\-t \*(Aq\*(Aq\fR"\&. .RE .PP \fB\-p\fR, \fB\-\-precision\fR=\fICOUNT\fR .RS 4 Overrides automatic selection of precision to print \fICOUNT\fR decimal places, e\&.g\&. "0\&.100" for \fICOUNT\fR = 3\&. By default, the number of digits to print is computed from the arguments given and the (given or computed) step size\&. .RE .PP \fB\-s\fR, \fB\-\-separator\fR=\fITEXT\fR .RS 4 Overrides the separator that is printed between values\&. By default, values are separated by a newline\&. \fITEXT\fR is subject to processing of C escape sequences (e\&.g\&. "\en" makes a newline)\&. .RE .PP \fB\-t\fR, \fB\-\-terminator\fR=\fITEXT\fR .RS 4 Overrides the terminator that is printed in the very end\&. Default is a newline\&. \fITEXT\fR is subject to processing of C escape sequences (e\&.g\&. "\en" makes a newline)\&. .RE .PP \fB\-w\fR, \fB\-\-word\fR=\fIFORMAT\fR .RS 4 Alias for \-\-format, for compatibility with jot\&. For GNU seq\(cqs \fB\-w\fR meaning \fB\-\-equal\-width\fR, see \fB\-e\fR\&. .RE .PP \fB\-z\fR, \fB\-\-zero\fR, \fB\-\-null\fR .RS 4 Print null bytes as separator, not a newline\&. .RE .SS "OTHER" .PP \fB\-h\fR, \fB\-\-help\fR .RS 4 Outputs usage information and exits with code 0 (success)\&. .RE .PP \fB\-V\fR, \fB\-\-version\fR .RS 4 Displays version information and exits with code 0 (success)\&. .RE .SH "USAGE IN DETAIL" .SS "ARGUMENTS" .sp The logic of \fBenum\fR\*(Aqs command line parameters is: .sp \fBenum\fR [ \fIOPTIONS\fR ] \fILEFT\fR \fB\&.\&.\fR \fICOUNT\fR\fBx\fR \fISTEP\fR \fB\&.\&.\fR \fIRIGHT\fR .sp Four arguments are involved: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fILEFT\fR, the value to start enumeration with .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fICOUNT\fR, the (maximum) number of values to produce .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fISTEP\fR, the gap from one value to another .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIRIGHT\fR, the value to stop enumeration at (in some cases before) .RE .sp Not all four arguments are needed, though specifying all four is possible\&. For a list of all valid combinations see \fBVALID COMBINATIONS\fR below\&. Details on derivation of defaults are addressed in \fBDERIVATION OF DEFAULTS\fR\&. .SS "VALID COMBINATIONS" .sp With four arguments: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fILEFT\fR \fB\&.\&.\fR \fICOUNT\fR\fBx\fR \fISTEP\fR \fB\&.\&.\fR \fIRIGHT\fR .RE .sp With three arguments: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fILEFT\fR \fICOUNT\fR\fBx\fR \fIRIGHT\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fILEFT\fR \fB\&.\&.\fR \fICOUNT\fR\fBx\fR \fISTEP\fR \fB\&.\&.\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fB\&.\&.\fR \fICOUNT\fR\fBx\fR \fISTEP\fR \fB\&.\&.\fR \fIRIGHT\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fILEFT\fR \fB\&.\&.\fR \fICOUNT\fR\fBx\fR \fB\&.\&.\fR \fIRIGHT\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fILEFT\fR \fB\&.\&.\fR \fISTEP\fR \fB\&.\&.\fR \fIRIGHT\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fILEFT\fR \fISTEP\fR \fIRIGHT\fR (for GNU seq compatibility) .RE .sp With two arguments: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fB\&.\&.\fR \fICOUNT\fR\fBx\fR \fISTEP\fR \fB\&.\&.\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fB\&.\&.\fR \fICOUNT\fR\fBx\fR \fB\&.\&.\fR \fIRIGHT\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fICOUNT\fR\fBx\fR \fB\&.\&.\fR \fIRIGHT\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fB\&.\&.\fR \fISTEP\fR \fB\&.\&.\fR \fIRIGHT\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fILEFT\fR \fB\&.\&.\fR \fICOUNT\fR\fBx\fR \fB\&.\&.\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fILEFT\fR \fB\&.\&.\fR \fISTEP\fR \fB\&.\&.\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fILEFT\fR \fB\&.\&.\fR \fIRIGHT\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fILEFT\fR \fIRIGHT\fR (for GNU seq compatibility) .RE .sp With one argument: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fB\&.\&.\fR \fISTEP\fR \fB\&.\&.\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fB\&.\&.\fR \fICOUNT\fR\fBx\fR \fB\&.\&.\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fB\&.\&.\fR \fIRIGHT\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fIRIGHT\fR (for GNU seq compatibility) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fILEFT\fR \fB\&.\&.\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBenum\fR \fICOUNT\fR\fBx\fR .RE .sp With less than three arguments, defaults apply\&. Details are described in \fBDERIVATION OF DEFAULTS\fR below\&. .sp Technically, more use cases are possible\&. For instance, \fICOUNT\fR\fBx\fR \fISTEP\fR \fB\&.\&.\fR \fIRIGHT\fR is unambiguous since the order of arguments is fixed\&. Yet, "enum 3x 4 \&.\&. 10" reads a lot like "3 values between 4 and 10" while it actually would mean "3 values up to 10 in steps of 4"\&. In order to keep enum\(cqs user interface as intuitive as possible, cases which could lead to misunderstandings are not implemented\&. .SS "DERIVATION OF DEFAULTS" .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBAUTO-SELECTION OF PRECISION\fR .RS 4 .sp \fBenum\fR distinguishes between "2", "2\&.0", "2\&.00" and so on: .sp .if n \{\ .RS 4 .\} .nf # enum 1 2 1 2 # enum 1 2\&.0 1\&.0 1\&.1 [\&.\&.] 1\&.9 2\&.0 .fi .if n \{\ .RE .\} .sp Also, if the derived step has more decimal places than the specified values for \fILEFT\fR and \fIRIGHT\fR, the output precision will be raised to that of the step value: .sp .if n \{\ .RS 4 .\} .nf # enum 1 \&.\&. 3x \&.\&. 2 1\&.0 1\&.5 2\&.0 .fi .if n \{\ .RE .\} .sp A specified precision always takes precedence, though: .sp .if n \{\ .RS 4 .\} .nf # enum \-p 2 1 \&.\&. 3x \&.\&. 2 1\&.00 1\&.50 2\&.00 .fi .if n \{\ .RE .\} .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBARGUMENT DEFAULTS\fR .RS 4 .sp In general, three arguments are needed; any three imply the fourth\&. This equation brings them together: .sp \fILEFT\fR + (\fICOUNT\fR \- 1) * \fISTEP\fR = \fIRIGHT\fR .sp If you specify less than three of them (see \fBVALID COMBINATIONS\fR), the unspecified ones are derived or set to their defaults: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fILEFT\fR defaults to 1 (unless \fISTEP\fR and \fIRIGHT\fR are specified, see \fBDERIVATION OF LEFT\fR below) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fICOUNT\fR is infinity, unless it can be derived from the other three values\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fISTEP\fR defaults to 1, unless it can be derived\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIRIGHT\fR is +/\-infinity, unless it can be derived from the other three values\&. .RE .sp Obviously, if \fICOUNT\fR is set to zero (\fB0x\fR), enum will output nothing, regardless of the other arguments\&. .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBDERIVATION OF LEFT\fR .RS 4 .sp In general, \fILEFT\fR defaults to 1: .sp .if n \{\ .RS 4 .\} .nf # enum \&.\&. 3 1 2 3 .fi .if n \{\ .RE .\} .sp If \fISTEP\fR and \fIRIGHT\fR is given, it is derived as .sp \fILEFT\fR = \fIRIGHT\fR \- \fISTEP\fR * floor(\fIRIGHT\fR / \fISTEP\fR) .sp .if n \{\ .RS 4 .\} .nf # enum \&.\&. 4 \&.\&. 10 2 6 10 .fi .if n \{\ .RE .\} .sp If, in addition to \fISTEP\fR and \fIRIGHT\fR, \fICOUNT\fR is given, it is derived as: .sp \fILEFT\fR = \fIRIGHT\fR \- (\fICOUNT\fR \- 1) * \fISTEP\fR .sp .if n \{\ .RS 4 .\} .nf # enum \&.\&. 2x 4 \&.\&. 10 6 10 .fi .if n \{\ .RE .\} .RE .SS "GENERATION OF VALUES" .sp When a custom step is requested, values are produced as follows: .sp .if n \{\ .RS 4 .\} .nf value[0] = LEFT + 0 * STEP value[1] = LEFT + 1 * STEP \&.\&. value[i] = LEFT + i * STEP .fi .if n \{\ .RE .\} .sp Otherwise, to avoid imprecision adding up, values are produced as follows: .sp .if n \{\ .RS 4 .\} .nf value[0] = LEFT + (RIGHT \- LEFT) / (COUNT \- 1) * 0 value[1] = LEFT + (RIGHT \- LEFT) / (COUNT \- 1) * 1 \&.\&. value[i] = LEFT + (RIGHT \- LEFT) / (COUNT \- 1) * i .fi .if n \{\ .RE .\} .sp Production stops when either \fICOUNT\fR values have been produced or \fIRIGHT\fR has been reached, whichever hits first\&. When all four values are given in perfect match they hit at the same time\&. .SH "RANDOM MODE" .sp Basically, random mode differs in these regards: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Produced values are random\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Argument \fICOUNT\fR defaults to 1 (one)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Argument \fILEFT\fR (always!) defaults to 1 (one)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Argument \fIRIGHT\fR is required: Random does not mix with infinity\&. .RE .sp This section covers these differences in detail\&. .SS "COUNT DEFAULTS TO 1 (ONE)" .sp In random mode only one value is produced, by default: .sp .if n \{\ .RS 4 .\} .nf # enum 1 4 1 2 3 4 # enum \-r 1 4 3 .fi .if n \{\ .RE .\} .sp By specifying \fICOUNT\fR you can produce more values at a time: .sp .if n \{\ .RS 4 .\} .nf # enum \-r 1 \&.\&. 3x \&.\&. 4 2 1 3 .fi .if n \{\ .RE .\} .SS "LEFT ALWAYS DEFAULTS TO 1 (ONE)" .sp When you need increasing numbers up to a certain maximum (say 10), each separated by a certain step (say 4) you can let \fBenum\fR calculate the needed starting value for you: .sp .if n \{\ .RS 4 .\} .nf # enum \&.\&. 4 \&.\&. 10 2 6 10 .fi .if n \{\ .RE .\} .sp In random mode \fILEFT\fR is never calculated and defaults to 1 (one): .sp .if n \{\ .RS 4 .\} .nf # enum \-r \&.\&. 5x 4 \&.\&. 10 1 1 9 1 5 .fi .if n \{\ .RE .\} .SS "RANDOM DOES NOT MIX WITH INFINITY" .sp In general, \fBenum\fR supports running towards infinity: .sp .if n \{\ .RS 4 .\} .nf # enum 1 \&.\&. 2\&.0 \&.\&. 1\&.0 3\&.0 5\&.0 [\&.\&.] .fi .if n \{\ .RE .\} .sp However, in random mode \fBenum\fR would now produce random numbers from 1 to infinity (or a big number like \fIFLT_MAX\fR from \fI\fR), which we have decided against\&. .SH "HISTORY" .sp \fBenum\fR is a fusion of GNU seq and jot, feature\-wise\&. At the core both tools print sequences of numbers\&. GNU seq has a clean interface but very limited functionality\&. jot on the other hand offers more advanced features, like producing random numbers, at the cost of a rather unfriendly interface\&. .sp With \fBenum\fR we try to offer a tool with the power of jot and a usable, easily memorable interface\&. \fBenum\fR is licensed under a BSD license and written in C89 for maximum portability\&. .sp The following sections take a look at the differences in detail\&. .SH "COMPARISON TO JOT" .sp Using \fBenum\fR instead of jot offers two main advantages: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} improved usability and .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} uniform behavior across distributions and operating systems\&. .RE .sp As of 2010\-10\-03, jot implementations still differ subtly between DragonFlyBSD, FreeBSD, MirOS BSD, NetBSD, OpenBSD, and OS X\&. For instance the command \fIjot \- 0 5\fR produces .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} 6 integers from 0 to 5 on FreeBSD and OS X, .sp .if n \{\ .RS 4 .\} .nf 0 1 2 3 4 5 .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} 100 integers from 0 to 99 on NetBSD, and .sp .if n \{\ .RS 4 .\} .nf 0 1 2 [\&.\&.] 97 98 99 .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} 100 integers from 0 to 5 (with consecutive duplicates) on DragonFlyBSD, MirOS BSD, and OpenBSD\&. .sp .if n \{\ .RS 4 .\} .nf 0 0 0 0 0 0 0 0 0 0 1 1 [\&.\&.] 4 4 5 5 5 5 5 5 5 5 5 5 .fi .if n \{\ .RE .\} .RE .sp Basically, the full feature set of jot plus a few enhancements is contained in \fBenum\fR\&. Names of parameters have been retained for increased compatibility, e\&.g\&. \fB\-p 2\fR works with \fBenum\fR as it does with jot: .sp .if n \{\ .RS 4 .\} .nf # jot \-p 2 3 1\&.00 2\&.00 3\&.00 # enum \-p 2 3 1\&.00 2\&.00 3\&.00 .fi .if n \{\ .RE .\} .sp Please see \fBOPTIONS\fR above for further details\&. .SS "ADDITIONAL FEATURES" .sp The extra features that \fBenum\fR offers over jot include: .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBMORE MEMORABLE COMMAND LINE USAGE\fR .RS 4 .sp In order to produce 3 random numbers between 1 and 10 (inclusively), you would run .sp .if n \{\ .RS 4 .\} .nf jot \-r 3 1 10 .fi .if n \{\ .RE .\} .sp with jot\&. We find these alternative calls to \fBenum\fR more intuitive: .sp .if n \{\ .RS 4 .\} .nf enum \-r 1 \&.\&. 3x \&.\&. 10 enum \-r 1 3x 10 .fi .if n \{\ .RE .\} .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBCUSTOM RESOLUTION OF RANDOM\fR .RS 4 .sp With \fBenum\fR you can specify that the possible values to be randomly selected from have a particular spacing\&. These two cases illustrate the difference between a gap of 2 and 3: .sp .if n \{\ .RS 4 .\} .nf # enum \-r 4 \&.\&. 100x 2 \&.\&. 10 | sort \-u \-n 4 6 8 10 # enum \-r 4 \&.\&. 100x 3 \&.\&. 10 | sort \-u \-n 4 7 10 .fi .if n \{\ .RE .\} .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBSUPPORT FOR SEVERAL PLACEHOLDERS IN FORMAT STRINGS\fR .RS 4 .sp jot on DragonFlyBSD, FreeBSD, MirOS BSD, OpenBSD, and OS X: .sp .if n \{\ .RS 4 .\} .nf # jot \-w %g%g 3 jot: too many conversions .fi .if n \{\ .RE .\} .sp jot on NetBSD: .sp .if n \{\ .RS 4 .\} .nf # jot \-w %g%g 3 jot: unknown or invalid format `%g%g\*(Aq .fi .if n \{\ .RE .\} .sp \fBenum\fR on any platform: .sp .if n \{\ .RS 4 .\} .nf # enum \-f %g%g 3 11 22 33 .fi .if n \{\ .RE .\} .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBSUPPORT FOR ESCAPE SEQUENCES\fR .RS 4 .sp None of the jot implementations we tested (DragonFlyBSD, FreeBSD, MirOS BSD, NetBSD, OpenBSD, and OS X) supports escape sequences, say "\en", in \fIFORMAT\fR: .sp .if n \{\ .RS 4 .\} .nf # jot \-w \*(Aq%g\ex41\*(Aq 1 1\ex41 .fi .if n \{\ .RE .\} .sp \fBenum\fR is able to unescape "\ex41" properly: .sp .if n \{\ .RS 4 .\} .nf # enum \-w \*(Aq%g\ex41\*(Aq 1 1A .fi .if n \{\ .RE .\} .sp On a side note, "\ex25" produces a literal "%"; it does not make a placeholder: .sp .if n \{\ .RS 4 .\} .nf # enum \-w \*(Aq%g \ex25g\*(Aq 1 1 %g .fi .if n \{\ .RE .\} .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNULL BYTES AS SEPARATOR\fR .RS 4 .sp When using format strings containing spaces, you may run into trouble in contexts like for loops or xargs: spaces are treated as separators which breaks up your strings in pieces: .sp .if n \{\ .RS 4 .\} .nf # enum \-f \*(Aqsheep number %d\*(Aq 2 | xargs \-n 1 echo sheep number 1 sheep number 2 .fi .if n \{\ .RE .\} .sp To prevent this, you could pass \fB\-\-null\fR to both \fBenum\fR and xargs: .sp .if n \{\ .RS 4 .\} .nf # enum \-\-null \-f \*(Aqsheep number %d\*(Aq 2 | xargs \-\-null \-n 1 echo sheep number 1 sheep number 2 .fi .if n \{\ .RE .\} .RE .SS "DIFFERENCES" .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBHANDLING OF FORMATS WITHOUT PLACEHOLDERS\fR .RS 4 .sp In contrast to jot, \fBenum\fR does not append the current value if the formatting string does not contain a placeholder\&. Behavior of jot: .sp .if n \{\ .RS 4 .\} .nf # jot 3 \-w test_ test_1 test_2 test_3 .fi .if n \{\ .RE .\} .sp Behavior of \fBenum\fR: .sp .if n \{\ .RS 4 .\} .nf # enum \-w test_ 3 test_ test_ test_ .fi .if n \{\ .RE .\} .sp In order to achieve jot\(cqs output with \fBenum\fR, you should manually append a placeholder: .sp .if n \{\ .RS 4 .\} .nf # enum \-w test_%d 3 test_1 test_2 test_3 .fi .if n \{\ .RE .\} .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNON-NUMBER VALUES FOR LEFT AND RIGHT\fR .RS 4 .sp \fBenum\fR does not support using ASCII characters instead of their numerical values (e\&.g\&. "A" for 65) for \fILEFT\fR and \fIRIGHT\fR\&. With jot you can do: .sp .if n \{\ .RS 4 .\} .nf # jot 3 A 65 66 67 .fi .if n \{\ .RE .\} .sp Inconsistently, .sp .if n \{\ .RS 4 .\} .nf # jot 3 0 0 1 2 .fi .if n \{\ .RE .\} .sp jot does not interpret "0" as the ASCII character with code 48\&. We have no intention of duplicating this mix, at the moment\&. .RE .SH "COMPARISON TO GNU SEQ" .sp Basically, \fBenum\fR\*(Aqs usage is backwards\-compatible to that of GNU seq\&. .SS "ADDITIONAL FEATURES" .sp The extra features \fBenum\fR offers over GNU seq include: .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBRANDOM NUMBER MODE\fR .RS 4 .sp \fBenum\fR supports output of constrained random numbers, e\&.g\&. .sp .if n \{\ .RS 4 .\} .nf enum \-r 4 \&.\&. 3x 2\&.0 \&.\&. 11 .fi .if n \{\ .RE .\} .sp produces three (possibly duplicate) random numbers from the set {4\&.0, 6\&.0, 8\&.0, 10\&.0}\&. .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBSUPPORT FOR INVERSE ORDERING\fR .RS 4 .sp In contrast to GNU seq, \fBenum\fR supports enumerating decreasing values: .sp .if n \{\ .RS 4 .\} .nf # seq 3 1 # enum 3 1 3 2 1 .fi .if n \{\ .RE .\} .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBSUPPORT FOR SEVERAL PLACEHOLDERS IN FORMAT STRINGS\fR .RS 4 .sp .if n \{\ .RS 4 .\} .nf # seq \-f %g%g 3 seq: format `%g%g\*(Aq has too many % directives # enum \-f %g%g 3 11 22 33 .fi .if n \{\ .RE .\} .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBSUPPORT FOR ESCAPE SEQUENCES\fR .RS 4 .sp GNU seq does not support escape sequences, say "\en", in \fIFORMAT\fR: .sp .if n \{\ .RS 4 .\} .nf # seq \-f \*(Aq%g\ex41\*(Aq 1 1\ex41 .fi .if n \{\ .RE .\} .sp In contrast, some of the other seq implementations around do\&. These three behaviours can be observed (as of 2010\-10\-25): .sp seq of Plan 9, 9base, and GNU seq: .sp .if n \{\ .RS 4 .\} .nf # seq \-f \*(Aq%g\ex41\*(Aq 3 1\ex41 2\ex41 3\ex41 .fi .if n \{\ .RE .\} .sp seq on FreeBSD and NetBSD: .sp .if n \{\ .RS 4 .\} .nf # seq \-f \*(Aq%g\ex41\*(Aq 1 1A 2A 3A .fi .if n \{\ .RE .\} .sp seq on DragonFlyBSD: .sp .if n \{\ .RS 4 .\} .nf # seq \-f \*(Aq%g\ex41\*(Aq 1 1A3 2A3 3A3 .fi .if n \{\ .RE .\} .sp \fBenum\fR unescape "\ex41" to "A" as well: .sp .if n \{\ .RS 4 .\} .nf # enum \-f \*(Aq%g\ex41\*(Aq 3 1A 2A 3A .fi .if n \{\ .RE .\} .sp On a side note, "\ex25" produces a literal "%"; it does not make a placeholder: .sp .if n \{\ .RS 4 .\} .nf # enum \-f \*(Aq%g \ex25g\*(Aq 1 1 %g .fi .if n \{\ .RE .\} .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBOMITTING FINAL NEWLINE\fR .RS 4 .sp By specifying \fB\-n\fR as a parameter, you can make \fBenum\fR omit the trailing newline\&. .RE .SS "DIFFERENCES" .sp GNU seq\(cqs \fB\-\-equal\-width\fR shortcut \fB\-w\fR conflicts with jot\(cqs \fB\-w word\fR\&. We chose to make \fB\-e\fR the shortcut for \fB\-\-equal\-width\fR in \fBenum\fR, instead\&. .sp Also, while GNU seq is licensed under GPL v3 or later, \fBenum\fR is licensed under the New BSD license\&. .SH "THANKS" .sp Elias Pipping, Andreas Gunschl, Justin B\&. Rye, David Prevot, Kamil Dudka, Michael Bienia .SH "AUTHORS" .sp Jan Hauke Rahm .sp Sebastian Pipping .SH "RESOURCES" .sp Main web site: https://fedorahosted\&.org/enum/ .sp Gitweb: http://git\&.fedorahosted\&.org/git/?p=enum\&.git .SH "SEE ALSO" .sp jot(1), seq(1), printf(3)