[comp.std.unix] Control characters in the shell

karl@IMA.IMA.ISC.COM (Karl Heuer) (03/22/90)

From: karl@IMA.IMA.ISC.COM (Karl Heuer)

This came up in comp.org.usrgroup, but I think this is a better place.

Observation: The shell, considered as a programming language, has a string
datatype but does not have adequate facilities for embedding nonprinting
characters in a string constant.  As a result, several commands (date, echo,
paste, prs, stty, tr) have evolved (largely incompatible) notations for
translating escape sequences into such nonprinting characters.

Opinion: A much cleaner solution would be to have a simple shell syntax which
causes the nonprinting characters to be embedded into the argument string, so
that it would be transparent to the program.

Proposal: Reserve $\ (dollar-backslash) as a new entity that begins a C-like
escape, so we would have $\a $\b $\t $\n $\v $\f $\r, octal escapes like
$\177, and hex escapes like $\x7F.

Alternative proposal (from a suggestion by Eric Gisin, eric@mks.com): make a
new string quoting mechanism, $"...", which is just like "..." except that, in
addition to the four current backslash escapes \$ \` \" \\ that are permitted
inside double quotes, all the C-like escapes \a etc. would be recognized.

I'm told that the POSIX shell does not address this perceived deficiency.  I
hope it's not too late for this to be corrected.

Karl W. Z. Heuer (karl@ima.ima.isc.com or harvard!ima!karl), The Walking Lint

Volume-Number: Volume 19, Number 20

std-unix@longway.TIC.COM (Moderator, John S. Quarterman) (03/23/90)

From: Maarten Litmaath <uunet!cs.vu.nl!maart>

In article <589@longway.TIC.COM>,
	karl@IMA.IMA.ISC.COM (Karl Heuer) writes:
)...
)Proposal: Reserve $\ (dollar-backslash) as a new entity that begins a C-like
)escape, so we would have $\a $\b $\t $\n $\v $\f $\r, octal escapes like
)$\177, and hex escapes like $\x7F.
)
)Alternative proposal (from a suggestion by Eric Gisin, eric@mks.com): make a
)new string quoting mechanism, $"...", which is just like "..." except that, in
)addition to the four current backslash escapes \$ \` \" \\ that are permitted
)inside double quotes, all the C-like escapes \a etc. would be recognized.

Good idea!
But why not allow *both* syntaxes?  The first would be a simple form of
the second:

	$\a
equals
	$"\a"

...just like:

	$foo
and
	${foo}

When you only want a single control character, you'd use the first form,
when you want some escape codes in a row (possibly containing `normal'
characters as well), you'd use the second form.
--
 1) Will 4.5BSD have wait5()?         |Maarten Litmaath @ VU Amsterdam:
 2) Sleep(3) should be sleep(2) again.|maart@cs.vu.nl, uunet!mcsun!botter!maart

Volume-Number: Volume 19, Number 23