我想在一行中将以下变量设置为相同的值
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 算术表示法does实际上支持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中的值确实是空的。
这是我的示例解决方案:
$> 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
export a=60 && export b=60 && export c=60
如果你有很多变量,可能不是最好的选择
就我而言,我必须在 bash 中捕获 Snowsql 命令的返回值和退出代码,这就是它对我的作用
导出 ret_value=$(snowsql 命令) rc=$?