Shell 如何以ksh格式导出具有相同值的多个变量?
我想在一行中将以下变量设置为相同的值Shell 如何以ksh格式导出具有相同值的多个变量?,shell,unix,ksh,Shell,Unix,Ksh,我想在一行中将以下变量设置为相同的值 Example: export A=B=C=20 “bash”中有可用的语法,但如何在ksh中实现上述功能 export a=60 && export b=60 && export c=60 如果您有许多变量,那么Ksh93(或bash)没有这样的表达式,这可能不是最好的选择,因此它更好 使之明确。但是您可以绑定多个变量 (及其初始值)在单个导出短语中: export A=1 B=2 C=3 测试: $ (export
Example: export A=B=C=20
“bash”中有可用的语法,但如何在ksh中实现上述功能
export a=60 && export b=60 && export c=60
如果您有许多变量,那么Ksh93(或bash)没有这样的表达式,这可能不是最好的选择,因此它更好
使之明确。但是您可以绑定多个变量
(及其初始值)在单个导出短语中:
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
。。。当B或C为空或不存在时,它也不起作用
算术符号
Ksh93算术表示法实际上支持C样式的链式赋值,但出于明显的原因,这只适用于数字,然后您必须分别执行导出:
$ ((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中的值实际上是空的。以下是我的示例解决方案:
$>导出HTTP\u代理=http://my.company.proxy:8080 &&导出http\u proxy=$http\u proxy https\u proxy=$http\u proxy https\u proxy=$http\u proxy
$> 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
解释
首先,我将HTTP\u PROXY
变量设置为export
并执行该命令,然后(&&
注意)将其余变量设置为与HTTP\u PROXY
相同的值,谢谢您的回答。但是,有C吗“导出多个变量时在shell中赋值的等价性我不确定C等价性是什么意思……你能解释一下吗?”。另外,如果你告诉我你的问题的目的是什么,也许我能回答得更好。在“C”中,我们可以给同一个值分配多个变量,例如:int a,b,C;a=b=c=10;我问这个问题是为了将“.profile”中的“变量”分组,它对于ksh
具有相同的值,当然它是有效的。但对于其他(较旧的)shell,在2次内编写导出是一种很好的语法:var=value;出口风险值
这就是答案的核心。当值包含空格时,如何使用语法export a=1 b=2 C=3
?export a=“Just use quotes”
只需执行以下操作:export{a,b,C}=20