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

问题描述 投票:0回答:5

我想在一行中将以下变量设置为相同的值

Example:  export A=B=C=20

“bash”中有可用的语法,但是我如何在 ksh 中完成上述操作?

shell unix ksh
5个回答
55
投票

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中的值确实是空的。


2
投票

这是我的示例解决方案:

$> 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
相同的值。


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

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

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


0
投票

就我而言,我必须在 bash 中捕获 Snowsql 命令的返回值和退出代码,这就是它对我的作用

导出 ret_value=$(snowsql 命令) rc=$?

© www.soinside.com 2019 - 2024. All rights reserved.