【问题标题】:How to export multiple variables with same value in ksh?如何在ksh中导出具有相同值的多个变量?
【发布时间】:2016-01-06 23:28:26
【问题描述】:

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

Example:  export A=B=C=20

'bash' 中有一个可用的语法,但我如何在 ksh 中完成上述操作?

【问题讨论】:

  • 只需这样做:export {A,B,C}=20

标签: shell unix ksh


【解决方案1】:
export a=60 && export b=60 && export c=60

如果变量很多,可能不是最佳选择

【讨论】:

  • 感谢您的回答。但是,在导出多个变量时,shell 中是否有任何相当于赋值的“C”
  • 我不确定你所说的 C 等价物是什么意思..你能解释一下。另外,如果您说出您的问题的目的是什么,也许我可以回答得更好
  • 在'C'中,我们可以将多个变量分配给同一个值,例如:int a,b,c; a=b=c=10;我问了这个问题,将“.profile”中具有相同值的“变量”分组
【解决方案2】:

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"
【解决方案3】:

这是我的示例解决方案:

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

【讨论】:

    【解决方案4】:

    这是一个可移植的,虽然有点罗嗦的解决方案。与算术符号相比的优势在于它也适用于字符串:

    $ 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
    

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      相关资源
      最近更新 更多