我希望能够在一行代码中将以下变量设置为相同的值
Example: export A=B=C=20
'bash' 中有一种语法可用,但我该如何在 ksh 中实现上述功能?
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 中的值确实为空。
ksh
,当然可以工作。但是对于其他(旧的)shell来说,将导出写成两次是一个好的语法:var=value ; export var ;
也就是说,export a b d
是答案的核心。 - Sandburgexport A=1 B=2 C=3
? - Ivan Samovarexport A="Just use quotes"
- Henk Langeveld下面提供一种方便,虽然有点冗长的解决方案。与算术符号表示法相比,优势在于它也适用于字符串:
$ 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 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
相同的值。
export a=60 && export b=60 && export c=60
如果你有很多变量,这可能不是最好的选择。