如何在ksh中导出多个具有相同值的变量?

31

我希望能够在一行代码中将以下变量设置为相同的值

Example:  export A=B=C=20

'bash' 中有一种语法可用,但我该如何在 ksh 中实现上述功能?


1
只需这样做:export {A,B,C}=20 - gonzalesraul
4个回答

53

Ksh93(或 bash)没有这样的表达式,因此最好明确表达。但是您可以将多个变量(及其初始值)捆绑在单个export短语中:

export A=1 B=2 C=3

测试:

$ (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=

笨拙的替代方案

除非您想要这个丑陋的东西,否则没有类似于C语言的快捷方式:

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

这不适用于export,当B或C为空或不存在时也不起作用。

算术符号表示法

Ksh93 算术 符号表示法实际上支持C风格的链式赋值,但由于明显的原因,这仅适用于数字,然后您需要单独执行export

$ ((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

请注意我们没有导出c,并且它在子 shell 中的值确实为空。


1
对于 ksh,当然可以工作。但是对于其他(旧的)shell来说,将导出写成两次是一个好的语法:var=value ; export var ;也就是说,export a b d是答案的核心。 - Sandburg
1
当值包含空格时,如何使用语法export A=1 B=2 C=3 - Ivan Samovar
export A="Just use quotes" - Henk Langeveld

2

下面提供一种方便,虽然有点冗长的解决方案。与算术符号表示法相比,优势在于它也适用于字符串:

$ 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

2
这是我的示例解决方案: $> export HTTP_PROXY=http://my.company.proxy:8080 && export http_proxy=$HTTP_PROXY https_proxy=$HTTP_PROXY HTTPS_PROXY=$HTTP_PROXY 这行代码可以设置代理服务器,使得在进行 IT 技术操作时更加顺畅。
$> printenv | grep -i proxy
http_proxy=http://my.company.proxy:8080
HTTPS_PROXY=http://my.company.proxy:8080
https_proxy=http://my.company.proxy:8080
HTTP_PROXY=http://my.company.proxy:8080

解释

首先,我使用export命令设置了HTTP_PROXY变量,并执行该命令,然后(&&表示)将剩余的变量设置为与HTTP_PROXY相同的值。


1
export a=60 && export b=60 && export c=60

如果你有很多变量,这可能不是最好的选择。


谢谢你的回答。但是,在shell中,当导出多个变量时,是否有任何“C”等效的赋值方式? - Sathish Kumar
我不确定你所说的C语言等价物是什么意思,你能解释一下吗?另外,如果你告诉我你提出这个问题的目的,也许我可以更好地回答。 - Raj
在'C'中,我们可以将多个变量赋给同一个值,例如:int a,b,c; a = b = c = 10; 我在'.profile'中询问了这个问题,以便将具有相同值的“变量”分组。 - Sathish Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接