How to Export Multiple Variables with Same Value in Ksh?

How to Export Multiple Variables with Same Value in Ksh?

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 ?

1

4 Answers

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.

3

Here is my example solution for this:

$> export HTTP_PROXY= && export http_proxy=$HTTP_PROXY https_proxy=$HTTP_PROXY HTTPS_PROXY=$HTTP_PROXY

$> printenv | grep -i proxy
http_proxy=
HTTPS_PROXY=
https_proxy=
HTTP_PROXY=

Explanation

At first I set the HTTP_PROXY variable with export and execute that command and only after that (&& notes that) set the remaining variables to the same value as of HTTP_PROXY.

Here is a portable, although a bit wordy solution. The advantage over arithmetic notation is that it works also for strings:

$ for v in A B C D; do export $v=value; done
$ env | grep -E ^.=
_=*82496*/usr/bin/env
A=value
B=value
C=value
D=value
$ ksh --version
  version         sh (AT&T Research) 2020.0.0
export a=60 && export b=60 && export c=60

May not be the best option if you have many variables

3

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Alexander Ross
Author

Alexander Ross

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.