How to export multiple variables with same value in ksh?

Sathish Kumar picture Sathish Kumar · Oct 9, 2015 · Viewed 29.4k times · Source

I want to set the following variables to the same value in one single line

Example:  export A=B=C=20

There is a syntax available in 'bash' but how can I accomplish the above in ksh ?

Answer

Henk Langeveld picture Henk Langeveld · Oct 9, 2015

Ksh93 (or bash) doesn't have such expressions, so it's better to make it explicit. But you can bundle multiple variables (with their initial values) in a single export phrase:

export A=1 B=2 C=3

Testing:

$ (export A=1 B=2 C=3 && ksh -c 'echo A=$A B=$B C=$C D=$D')
A=1 B=2 C=3 D=

Awkward alternatives

There is no C-like shortcut, unless you want this ugly thing:

A=${B:=${C:=1}}; echo $A $B $C
1 1 1

... which does not work with export, nor does it work when B or C are empty or non-existent.

Arithmetic notation

Ksh93 arithmetic notation does actually support C-style chained assignments, but for obvious reasons, this only works with numbers, and you'll then have to do the export separately:

$ ((a=b=c=d=1234))
$ echo $a $b $c $d
1234 1234 1234 1234
$ export a b d
$ ksh -c 'echo a=$a b=$b c=$c d=$d'     # Single quotes prevent immediate substitution
a=1234 b=1234 c= d=d1234                # so new ksh instance has no value for $c

Note how we do not export c, and its value in the child shell is indeed empty.