【发布时间】:2016-01-06 23:28:26
【问题描述】:
我想在一行中将以下变量设置为相同的值
Example: export A=B=C=20
'bash' 中有一个可用的语法,但我如何在 ksh 中完成上述操作?
【问题讨论】:
-
只需这样做:export {A,B,C}=20
我想在一行中将以下变量设置为相同的值
Example: export A=B=C=20
'bash' 中有一个可用的语法,但我如何在 ksh 中完成上述操作?
【问题讨论】:
export a=60 && export b=60 && export c=60
如果变量很多,可能不是最佳选择
【讨论】:
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 风格的链式赋值,但出于显而易见的原因,这只适用于数字,然后您必须使用 @ 987654326@单独:
$ ((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 编写 2 次导出是一个很好的语法:var=value ; export var ; 也就是说export a b d是答案的核心。
export A=1 B=2 C=3?
export A="Just use quotes"
这是我的示例解决方案:
$> export HTTP_PROXY=http://my.company.proxy:8080 && export http_proxy=$HTTP_PROXY https_proxy=$HTTP_PROXY HTTPS_PROXY=$HTTP_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_PROXY 变量设置为export 并执行该命令,然后(&& 注意)将其余变量设置为与HTTP_PROXY 相同的值。
【讨论】:
这是一个可移植的,虽然有点罗嗦的解决方案。与算术符号相比的优势在于它也适用于字符串:
$ 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
【讨论】: